DataGridView
ウィジェットのあるフォームがあり、選択した名前の列のインデックスを取得する必要があります。
たとえば、Name、Surnameの2つの列を持つテーブルがあるとします。列名のインデックスを取得する方法が必要です。問題は、DataSource
に応じて常に変化することですが、その列は常に同じ名前「Name」を持っています。
誰かが問題を解決する方法を知っていますか?
DataGridView
列を名前で取得するには、列コレクションインデクサーを介して参照するだけです。
_datagridview1.Columns["columnName"]
_
次に、その列から列インデックスを取得できます。
_datagridview1.Columns["columnName"].Index;
_
無効な列名を使用すると、この参照はnullを返すため、使用する前に列参照がnullでないことを確認するか、最初に列コレクション.Contains()
メソッドを使用することをお勧めします。
DataGridViewColumnウィジェットのIndexプロパティ を使用して、インデックスを取得できます。
ColumnName.Index
これにより、列が存在しない場合にコンパイルエラーが生成されるため、実行時に列名が有効かどうかを確認する必要がなくなります。これにより、リファクタリングも簡単になります。
列にわかりやすい名前を付けることをお勧めします(たとえば、DCOL_SomeName
)簡単に区別できるようにします。同じフォームに複数のDataGridView
ウィジェットがある場合は、DataGridView
ウィジェットの名前を含めると役立ちます。
私が正しければ、e.ColumnIndex
もこれで機能します。 MSDNドキュメントを確認できますここ
コードの下に静的クラスを作成します
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");