DataSourceプロパティを介して、データソースとバインド (結びつけ) できます。このときデータソースの値を変更するとDataGridViewも更新され、逆にDataGridViewのセルの値を変更するとデータソースも更新されます。
DataTable table = new DataTable(); table.Columns.Add(); table.Rows.Add(0); table.Rows.Add(1); dataGridView.DataSource = table;Windowsフォームにおける「データ・バインディング」(1/3) - @IT 初音玲 (2010/11/16)
データソースから項目が削除されると、それがバインドされている行のDataBoundItemはnullとなり、セルの値もnullとなります。
DataTable table = new DataTable(); table.Columns.Add(); table.Rows.Add(0); dataGridView.DataSource = table; DataGridViewRow viewRow = dataGridView.Rows[0]; DataRow row = ((DataRowView)viewRow.DataBoundItem).Row; DataRowState state1 = row.RowState; // Added object view1 = viewRow.DataBoundItem; // DataRowView object o1 = viewRow.Cells[0].Value; // "0" row.Delete(); DataRowState state2 = row.RowState; // Detached object view2 = viewRow.DataBoundItem; // null object o2 = viewRow.Cells[0].Value; // null
リレーションシップなどでデータソースが階層化されているとき、下層のデータは処理対象となりません。この場合にはCellFormattingイベントを捕捉し、そこでDataGridViewCellFormattingEventArgs.Valueに表示したい内容を指定します。
データソースとして直接バインドされていないデータを更新しても、DataGridViewの表示は更新されません。このような場合にはDataGridView.UpdateCellValue()で明示的に更新させます。