web-dev-qa-db-ja.com

列名でDataGridViewのセル値を取得する方法は?

DataGridViewを持つWinFormsアプリケーションがあります。このデータソースは、xxxの列を持つDataTable(SQL Serverから入力)です。次のコードは、次の例外を発生させます。

ArgumentExceptionは処理されませんでした。 xxxという名前の列が見つかりません。

foreach (DataGridViewRow row in Rows)
{
    if (object.Equals(row.Cells["xxx"].Value, 123))
}

列名でセル値を取得することは可能ですか?

19
ca9163d9

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))
    {
        // ...
    }
 }
20
Patrick Quirk

はい、引用符を削除して.Indexを追加するだけです。

foreach (DataGridViewRow row in Rows)
{
    if (object.Equals(row.Cells[xxx.Index].Value, 123)) 

...つまり、列が実際にxxxと呼ばれ、Column1などのような他の名前ではない場合です。列名と列ヘッダーを個別に設定できるので、デザイナーで確認してください。

10
Richard Hansell

これにより、現在選択されている行の「xxx」列名のセルにアクセスできるようになります。

dataGridView1.SelectedRows[0].Cells["xxx"]
9
jj_

私はこれを見つけました:

  1. Datagridviewを右クリックします。
  2. ポップアップメニュー[列の編集]から選択します。
  3. 必要な列を選択します。デザイン/(名前)-それはあなたが探していたものです。

サンプル:

if(dataGridViewProjectList.Rows[dataGridViewProjectList.CurrentCell.RowIndex].Cells["dateendDataGridViewTextBoxColumn"].Value.ToString().Length == 0)
6
Serg

デザインモードで列をグリッドする場合。列名はgridView ~~~ Columnコントロールの名前の例です:

DataGridViewTextBoxColumn idDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();

idDataGridViewTextBoxColumn.Name = "idDataGridViewTextBoxColumn";

そうすれば、これにアクセスできます。

row.Cells["idDataGridViewTextBoxColumn"].Value
3
Kim Ki Won

あなたが見る場合:

row.Cells["xxx"].Value;

これで :

row.Cells[yourdataGridView.Columns["xxx"].Index].Value;
0