2011-07-07 73 views
12

我有一個DataGridView小部件的窗體,我需要獲取所選列名的索引。datagridview列索引

例如,假設我有一個包含2列的表格:姓名,姓氏。我需要一種方法來獲取列名稱的索引。問題在於,它始終根據DataSource進行更改,但該列始終具有相同的名稱「名稱」。

有誰知道如何解決這個問題?

回答

21

來檢索名稱DataGridView列,您只需通過列集合索引引用它:

datagridview1.Columns["columnName"].Index; 

請注意,如果:

datagridview1.Columns["columnName"] 

然後你可以從該列獲取列索引您使用無效的列名稱,則此引用將返回null,因此您可能需要在使用該列引用之前檢查該列引用是否爲空,或者先使用列集合.Contains()方法。

+1

爲了安全起見(其它用戶)下面你應該檢查是否列第一存在:datagridview1 .Columns.Contains(「ColumnName」) – ginalster

+0

@ginalster謝謝 - 好點,我已經添加到答案。 –

+1

這是怎麼回事呢? – Neolisk

0

如果我是對的,e.ColumnIndex也適用於此。你可以查看MSDN文檔here

0

您可以通過使用the Index property of the DataGridViewColumn widget的景氣指數,因爲這樣:

ColumnName.Index 

這避免了檢查在運行時,列名是否有效,因爲它會產生的需求如果該列不存在,則爲編譯錯誤。這也使得重構更容易。

我建議您給列指定一個明智的名稱(例如DCOL_SomeName),以便您可以輕鬆區分它們。如果在同一表單上有多個DataGridView小部件,則包含DataGridView小部件的名稱將有所幫助。

0

創建一個靜態類的代碼

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");