我有一个带有DataGridView
小部件的表单,我需要获取具有所选名称的列的索引。
例如,假设我有一个包含2列的表:Name,Surname。我需要一种方法来获取列名的索引。问题是它会一直根据DataSource
进行更改,但该列始终具有相同的名称“名称”。
有谁知道如何解决这个问题?
答案 0 :(得分:24)
要按名称检索DataGridView
列,只需通过列集索引器引用它:
datagridview1.Columns["columnName"]
然后您可以从该列获取列索引:
datagridview1.Columns["columnName"].Index;
请注意,如果使用无效的列名,则此引用将返回null,因此您可能希望在使用之前检查列引用是否为null,或者首先使用columns集合.Contains()
方法。
答案 1 :(得分:1)
如果我是对的,e.ColumnIndex
也适用于此。您可以查看MSDN文档 here
答案 2 :(得分:0)
您可以使用the Index property of the DataGridViewColumn widget来获取索引,如下:
ColumnName.Index
这样就无需检查列名在运行时是否有效,因为如果列不存在,它将生成编译错误。这也使重构更容易。
我建议您为列添加一个合理的名称(例如DCOL_SomeName
),以便您可以轻松区分它们。如果您在同一表单上有多个DataGridView
小部件,那么包含DataGridView
小部件的名称会有所帮助。
答案 3 :(得分: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");
答案 4 :(得分:0)
我发现使用列对象的 Name 属性更安全,而不是使用列名作为字符串,因为这样可以在未来进行更一致的代码重构。
datagridview1.Columns[column1.Name].Index;
此外,首先要确保该列不为空,并且正如其他人所说,它包含在 datagridview 中,这一点很重要。