2011-07-07 44 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");