1

私は以下に書かれているものにいくぶん似た方法を持っています(これは私がC#で働いている単なる擬似コードです):

function GenerateChart(DataTable dt)
{
    DataTable dtChartTable = dt;
    dtChartTable.DefaultView.Sort = "SomeColumnName";
    //remaining functionality
}

上記のコードが行うことは、dtのレコードもソートすることです。なぜそうしているのかわかりません。注として、この関数は2つの異なる場所から呼び出されます。1つの場所でDatatableオブジェクトを送信し、もう1つの場所でDatatableはセッションに保存されているオブジェクトから直接参照されます。

4

2 に答える 2

1

それは正しい。dtChartTable変数を、dt変数で表されるのと同じメモリに設定しています。したがって、dtChartTableの並べ替えは、2番目で使用されるのと同じDefaultViewプロパティに影響します。

この動作が必要ない場合は、を使用してdtのコピーを作成できます。

DataTable dtChartTable = dt.Copy();

ただし、このようにすべてのデータ行が複製されるため、これにはコストがかかります。
別の可能性は、新しいDataViewを作成することです

DataView view = new DataView(dt);
view.Sort = "SomeColumnName";  
......

これは元のdt.DefaultViewには影響せず、この新しいDataViewからdatarowviewを処理できます。

于 2012-06-28T10:16:43.397 に答える
1

あなたがするとき

DataTable dtChartTable = dt;

新しいコピーを作成しますが、Datatableは参照型であるため、どちらもメモリ内の同じ場所を参照します。したがって、一方の変更が他方に反映されます。

代わりに

 DataTable dtChartTable = dt.Copy();

これにより、コピーが作成され、メモリ内の別の場所が参照されます。一方の変更は、もう一方には反映されません。

于 2012-06-28T10:19:07.440 に答える