DataGridView列索引

19

我有一个带有 DataGridView 控件的表单,需要获取选择的列名的索引。

例如,假设我的表格有两列:姓名和姓氏。我需要一种方法来获取名称列的索引。问题在于它根据 DataSource 不断变化,但该列始终具有相同的名称“Name”。

有人知道如何解决这个问题吗?

5个回答

32

要通过名称检索DataGridView列,您只需通过列集合索引器引用它:

datagridview1.Columns["columnName"]

那么您可以从该列中获取列索引:

datagridview1.Columns["columnName"].Index;

请注意,如果您使用的列名无效,则此引用将返回null,因此在使用它之前,您可能需要检查列引用不为null,或者首先使用列集合的.Contains()方法。


1
为了保险起见(其他用户),您应该首先检查列是否存在:datagridview1.Columns.Contains("ColumnName")。 - Gina Marano
@ginalster 谢谢 - 很好的建议,我已经将其添加到答案中。 - David Hall

1
在下面的代码中创建一个静态类。
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");

1

如果我没错,e.ColumnIndex 也可以用于这个。你可以查看 MSDN 文档 这里


1
您可以通过使用 DataGridViewColumn小部件的Index属性 来获取索引,如下所示:
ColumnName.Index

这样做可以避免在运行时检查列名是否有效,因为如果该列不存在,则会生成编译错误。这也使得重构更容易。
我建议您为列命名一个明智的名称(例如DCOL_SomeName),以便您可以轻松区分它们。如果您在同一窗体上有多个DataGridView小部件,则包括DataGridView小部件的名称将会有所帮助。

0

我发现使用列对象的名称属性更安全,而不是使用列名作为字符串,因为这样可以在未来进行更一致的代码重构。

datagridview1.Columns[column1.Name].Index;

另外,首先确保该列不为空,并且像其他人所说的那样,它包含在datagridview中非常重要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接