我有一个带有 DataGridView
控件的表单,需要获取选择的列名的索引。
例如,假设我的表格有两列:姓名和姓氏。我需要一种方法来获取名称列的索引。问题在于它根据 DataSource
不断变化,但该列始终具有相同的名称“Name”。
有人知道如何解决这个问题吗?
我有一个带有 DataGridView
控件的表单,需要获取选择的列名的索引。
例如,假设我的表格有两列:姓名和姓氏。我需要一种方法来获取名称列的索引。问题在于它根据 DataSource
不断变化,但该列始终具有相同的名称“Name”。
有人知道如何解决这个问题吗?
要通过名称检索DataGridView
列,您只需通过列集合索引器引用它:
datagridview1.Columns["columnName"]
那么您可以从该列中获取列索引:
datagridview1.Columns["columnName"].Index;
请注意,如果您使用的列名无效,则此引用将返回null,因此在使用它之前,您可能需要检查列引用不为null,或者首先使用列集合的.Contains()
方法。
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");
ColumnName.Index
DCOL_SomeName
),以便您可以轻松区分它们。如果您在同一窗体上有多个DataGridView
小部件,则包括DataGridView
小部件的名称将会有所帮助。我发现使用列对象的名称属性更安全,而不是使用列名作为字符串,因为这样可以在未来进行更一致的代码重构。
datagridview1.Columns[column1.Name].Index;
另外,首先确保该列不为空,并且像其他人所说的那样,它包含在datagridview中非常重要。