【发布时间】:2011-09-30 21:01:08
【问题描述】:
我有一个带有DataGridView 小部件的表单,我需要获取具有所选名称的列的索引。
例如,假设我有一个包含 2 列的表:姓名、姓氏。我需要一种方法来获取列名的索引。问题是它一直根据DataSource 而变化,但该列始终具有相同的名称“名称”。
有谁知道如何解决这个问题?
【问题讨论】:
标签: c# datagridview indexing
我有一个带有DataGridView 小部件的表单,我需要获取具有所选名称的列的索引。
例如,假设我有一个包含 2 列的表:姓名、姓氏。我需要一种方法来获取列名的索引。问题是它一直根据DataSource 而变化,但该列始终具有相同的名称“名称”。
有谁知道如何解决这个问题?
【问题讨论】:
标签: c# datagridview indexing
我发现使用列对象的 Name 属性比使用列名作为字符串更安全,因为这样可以在将来进行更一致的代码重构。
datagridview1.Columns[column1.Name].Index;
此外,重要的是首先确保该列不为空,并且正如其他人所说,它包含在 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");
【讨论】:
可以通过the Index property of the DataGridViewColumn widget获取索引,如下:
ColumnName.Index
这避免了在运行时检查列名是否有效的需要,因为如果列不存在则会产生编译错误。这也使重构更容易。
我建议您给列起一个合理的名称(例如DCOL_SomeName),以便您可以轻松区分它们。如果您在同一个表单上有多个 DataGridView 小部件,包括 DataGridView 小部件的名称会有所帮助。
【讨论】:
要按名称检索DataGridView 列,您只需通过列集合索引器引用它:
datagridview1.Columns["columnName"]
然后就可以从该列获取列索引:
datagridview1.Columns["columnName"].Index;
请注意,如果您使用无效的列名,则此引用将返回 null,因此您可能需要在使用之前检查列引用不为 null,或者先使用列集合 .Contains() 方法。
【讨论】:
如果我是对的,e.ColumnIndex 也可以解决这个问题。你可以查看 MSDN 文档 here
【讨论】: