DataGridView
を持つWinFormsアプリケーションがあります。このデータソースは、xxx
の列を持つDataTable(SQL Serverから入力)です。次のコードは、次の例外を発生させます。
ArgumentExceptionは処理されませんでした。 xxxという名前の列が見つかりません。
foreach (DataGridViewRow row in Rows)
{
if (object.Equals(row.Cells["xxx"].Value, 123))
}
列名でセル値を取得することは可能ですか?
DataGridViewColumn
オブジェクトには、Name
(フォームデザイナのみに表示)およびHeaderText
(列の上部にあるGUIに表示)プロパティがあります。この例のインデクサーは列のName
プロパティを使用するため、それが機能していないと言っているので、列のヘッダーを実際に使用しようとしていると思います。
あなたが望むことをするものは何も組み込まれていませんが、追加するのは簡単です。拡張メソッドを使用して使いやすくします。
public static class DataGridHelper
{
public static object GetCellValueFromColumnHeader(this DataGridViewCellCollection CellCollection, string HeaderText)
{
return CellCollection.Cast<DataGridViewCell>().First(c => c.OwningColumn.HeaderText == HeaderText).Value;
}
}
そして、あなたのコードで:
foreach (DataGridViewRow row in Rows)
{
if (object.Equals(row.Cells.GetCellValueFromColumnHeader("xxx"), 123))
{
// ...
}
}
はい、引用符を削除して.Indexを追加するだけです。
foreach (DataGridViewRow row in Rows)
{
if (object.Equals(row.Cells[xxx.Index].Value, 123))
...つまり、列が実際にxxxと呼ばれ、Column1などのような他の名前ではない場合です。列名と列ヘッダーを個別に設定できるので、デザイナーで確認してください。
これにより、現在選択されている行の「xxx」列名のセルにアクセスできるようになります。
dataGridView1.SelectedRows[0].Cells["xxx"]
私はこれを見つけました:
サンプル:
if(dataGridViewProjectList.Rows[dataGridViewProjectList.CurrentCell.RowIndex].Cells["dateendDataGridViewTextBoxColumn"].Value.ToString().Length == 0)
デザインモードで列をグリッドする場合。列名はgridView ~~~ Columnコントロールの名前の例です:
DataGridViewTextBoxColumn idDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
idDataGridViewTextBoxColumn.Name = "idDataGridViewTextBoxColumn";
そうすれば、これにアクセスできます。
row.Cells["idDataGridViewTextBoxColumn"].Value
あなたが見る場合:
row.Cells["xxx"].Value;
これで :
row.Cells[yourdataGridView.Columns["xxx"].Index].Value;