我有一個DataGridView
小部件的窗體,我需要獲取所選列名的索引。datagridview列索引
例如,假設我有一個包含2列的表格:姓名,姓氏。我需要一種方法來獲取列名稱的索引。問題在於,它始終根據DataSource
進行更改,但該列始終具有相同的名稱「名稱」。
有誰知道如何解決這個問題?
我有一個DataGridView
小部件的窗體,我需要獲取所選列名的索引。datagridview列索引
例如,假設我有一個包含2列的表格:姓名,姓氏。我需要一種方法來獲取列名稱的索引。問題在於,它始終根據DataSource
進行更改,但該列始終具有相同的名稱「名稱」。
有誰知道如何解決這個問題?
來檢索名稱DataGridView
列,您只需通過列集合索引引用它:
datagridview1.Columns["columnName"].Index;
請注意,如果:
datagridview1.Columns["columnName"]
然後你可以從該列獲取列索引您使用無效的列名稱,則此引用將返回null,因此您可能需要在使用該列引用之前檢查該列引用是否爲空,或者先使用列集合.Contains()
方法。
如果我是對的,e.ColumnIndex
也適用於此。你可以查看MSDN文檔here
您可以通過使用the Index property of the DataGridViewColumn widget的景氣指數,因爲這樣:
ColumnName.Index
這避免了檢查在運行時,列名是否有效,因爲它會產生的需求如果該列不存在,則爲編譯錯誤。這也使得重構更容易。
我建議您給列指定一個明智的名稱(例如DCOL_SomeName
),以便您可以輕鬆區分它們。如果在同一表單上有多個DataGridView
小部件,則包含DataGridView
小部件的名稱將有所幫助。
創建一個靜態類的代碼
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");
爲了安全起見(其它用戶)下面你應該檢查是否列第一存在:datagridview1 .Columns.Contains(「ColumnName」) – ginalster
@ginalster謝謝 - 好點,我已經添加到答案。 –
這是怎麼回事呢? – Neolisk