24

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

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

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

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

4

8 に答える 8

27

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))
    {
        // ...
    }
 }
于 2012-11-18T01:54:06.563 に答える
12

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

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

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

于 2013-12-09T15:43:07.763 に答える
11

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

dataGridView1.SelectedRows[0].Cells["xxx"]
于 2016-03-09T04:25:50.103 に答える
6

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

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

サンプル:

if(dataGridViewProjectList.Rows[dataGridViewProjectList.CurrentCell.RowIndex].Cells["dateendDataGridViewTextBoxColumn"].Value.ToString().Length == 0)
于 2013-10-24T06:36:01.123 に答える