0

my にデータを取得するDataSetと、year列は my の 3 番目の列になりますDataSet。この列を使用した後は必要ないので、いくつかの計算を行うためRemove、列の名前をメソッドに渡すメソッドを使用して削除しますRemove。問題は、foreachループでデータを取得することです。そのため、データを再度取得すると、year列が最後の列になり、DataSetアクセスしようとすると、year列が見つからないというエラーがスローされます。これを回避する私の方法は、 by に複製しDataSetDataTableから、各行をデータセットから my にインポートすることDataTableでしたが、より効率的な方法またはyear列を元の位置に保つ方法はありますか?

private int GetData()
{
    dataSet.GetExportData();

    DataTable dt = dataSet.ExportData;

    for(int i = 0; i <dataSet.ExportData; i++)
    {
        //Do Stuff
    }

    dataSet.Columns.Remove(dataSet.ExportData.YearColumn.ColumnName);   
}

上記のコードでは、ダイアログを開いてエクスポートするデータを選択すると、最初は機能しますが、ダイアログを開いたままにしてボタンをクリックして再度エクスポートすると、エラーがスローされます。ダイアログを閉じて再度開くと、正常に動作します。前に言ったように、ボタンをクリックして でデータを再度取得するときに気づいたのですが、厳密に型指定された列の定義された位置ではなく、列を最後dataSet.GetExportData()の列として配置します。これが問題であると想定していますが、方法がわかりませんクローンとインポートを行う以外に修正するには。YearDataSet

4

1 に答える 1

0

コメントしたほうがいいのですが、コードのスタイリングを活用したいのですが、コードを見ずに何を達成したいのか正確に言うのは難しいですが、

    foreach (DataRow row in myTable.Rows)
    {
        //do something with year column 
        myTable.Columns.Remove("year");
    }

myTable.Columns.Remove("year")上記のコードは最初の反復では正常に機能しますが、現在の行だけでなくテーブルから列全体を削除するため、その後は失敗し、You'll get Column 'year' does not belong to table Table.例外が発生します。

myTable.Columns.Remove("year");代わりにforeachを削除してみませんか?

    foreach (DataRow row in myTable.Rows)
    {
        //do something with year column 
    }

    myTable.Columns.Remove("year");
于 2012-09-20T03:54:04.023 に答える