質問
何年も Web 開発を行った後、突然 WinForms に戻ってきましたが、簡単なはずのことで問題が発生しました。を持っています ArrayList
Windows フォームにバインドされたビジネス オブジェクトの数 DataGrid
. 。ユーザーがセルを編集できるようにし、完了したら [保存] ボタンを押してください。その時点で、すべての行と列を反復したいと思います。 DataGrid
変更を見つけてデータベースに保存します。しかし、アクセスする方法が見つかりません DataGrid
行。
また、編集中の個々のセルをリアルタイムで検証したいと考えていますが、それは実行できると確信しています。(おそらく、 ArrayList
として DataSource
?) しかし、反復に関しては、 DataGrid
, それは不可能のようでとても驚いています。
データグリッドを使用するには、実際にビジネス オブジェクトのデータをデータテーブルに詰め込む必要がありますか?
解決
foreach(var row in DataGrid1.Rows)
{
DoStuff(row);
}
//Or ---------------------------------------------
foreach(DataGridRow row in DataGrid1.Rows)
{
DoStuff(row);
}
//Or ---------------------------------------------
for(int i = 0; i< DataGrid1.Rows.Count - 1; i++)
{
DoStuff(DataGrid1.Rows[i]);
}
他のヒント
object cell = myDataGrid[row, col];
WinForms 3.0 について、1.1 よりもはるかに優れている点はありますか?
3.0 についてはわかりませんが、.NET 2.0 フレームワーク上で実行される VS 2008 でコードを書くことができます。(つまり、最新の C# 言語を使用できるようになりますが、使用できるのは 2.0 ライブラリのみです)
これでジェネリックスが得られます (List<DataRow>
GodAwful ArrayLists) やその他の大量のものの代わりに、文字通り 3 分の 1 のコードを書くことになります。
ああ、私は本当にもう一度全員をテストしたかったのです!:) 本当の答えは、データグリッドを反復する必要はほとんどないということです。ArrayList にバインドする場合でも、バインディングは双方向であるためです。それでも、グリッドを直接反復処理する方法を知っておくと便利です。コードを数行節約できる場合もあります。
しかし、NotMyself と Orion はより良い答えを出しました。開発コストを節約し、保守性と拡張性を高めるために、C# の上位バージョンに移行するよう関係者を説得します。