0

グリッドから DataRow があり、1 行でいくつかの列を変更する必要があります。そのため、すべての列を配列に入れ、それらを変更しようとしましたが、思い通りに動作しません。その説明が必要です。

私の目標は、すべての列を配列またはコレクションで特定の順序で取得し、それらを変更することです。現在、列以外のものを参照する新しいオブジェクトをいくつか作成していると思います。たぶん、いくつかの参照をコレクションに保存しようとする必要がありますか? ref を使用するのが最善の選択肢ですか?

DataRow dr = rows[i] as DataRow;
dr["size"] = 5000; // => size is 5000;
ChangeSize(dr); // => size is 6000;

ChangeSize本体

private void ChangeSize(DataRow dataRow)
{
             dataRow["size"] = 6000; // => size is 6000
             Object[] arrayOfColumns= { dataRow["size"], ... };
             arrayOfColumns[0] = 7000; // => won't change size...

}
4

2 に答える 2

1

配列の値を変更しているだけです。たまたまそれを経由して初期化しましdataRow["size"]たが、それは2つの間に永続的なリンクがあるという意味ではありません.

変更を に反映する必要がある場合はDataRow、それを行う別の方法が必要だと思います。

private void CopyToDataRow(Object[] source, DataRow target)
{
    target["size"] = source[0];
    // etc
}

配列が変更されるたびに、このようなカスタム コードをトリガーするという概念はありません。適切なタイミングで呼び出す必要があります。(そして、いいえ、refここではまったく役に立ちません。)

于 2013-10-08T07:54:55.623 に答える
1

dataRow["size"] には、値型である int が含まれています。

arrayOfColumns をインスタンス化して初期化すると、参照ではなく、dataRow["size"] に含まれる値のコピーが取得されます。

于 2013-10-08T07:56:07.790 に答える