web-dev-qa-db-ja.com

datagridview列インデックス

DataGridViewウィジェットのあるフォームがあり、選択した名前の列のインデックスを取得する必要があります。

たとえば、Name、Surnameの2つの列を持つテーブルがあるとします。列名のインデックスを取得する方法が必要です。問題は、DataSourceに応じて常に変化することですが、その列は常に同じ名前「Name」を持っています。

誰かが問題を解決する方法を知っていますか?

16
harf

DataGridView列を名前で取得するには、列コレクションインデクサーを介して参照するだけです。

_datagridview1.Columns["columnName"]
_

次に、その列から列インデックスを取得できます。

_datagridview1.Columns["columnName"].Index;
_

無効な列名を使用すると、この参照はnullを返すため、使用する前に列参照がnullでないことを確認するか、最初に列コレクション.Contains()メソッドを使用することをお勧めします。

24
David Hall

DataGridViewColumnウィジェットのIndexプロパティ を使用して、インデックスを取得できます。

ColumnName.Index

これにより、列が存在しない場合にコンパイルエラーが生成されるため、実行時に列名が有効かどうかを確認する必要がなくなります。これにより、リファクタリングも簡単になります。

列にわかりやすい名前を付けることをお勧めします(たとえば、DCOL_SomeName)簡単に区別できるようにします。同じフォームに複数のDataGridViewウィジェットがある場合は、DataGridViewウィジェットの名前を含めると役立ちます。

1

私が正しければ、e.ColumnIndexもこれで機能します。 MSDNドキュメントを確認できますここ

1
Mr_Green

コードの下に静的クラスを作成します

public static class MyTools
{
    public static int IndexByName(this DataGridView dgv, string name)
    {
        foreach(DataGridViewColumn col in dgv.Columns)
        {
            if(col.HeaderText.ToUpper().Trim() == name.ToUpper().Trim())
            {
                return col.Index;
            }
        }
        return -1;
    }
}

次に、dataGridViewで呼び出します

int index = datagridview1.IndexByName("columnName");
0
djsony90