我有一个DataGridView
小部件的窗体,我需要获取所选列名的索引。datagridview列索引
例如,假设我有一个包含2列的表格:姓名,姓氏。我需要一种方法来获取列名称的索引。问题在于,它始终根据DataSource
进行更改,但该列始终具有相同的名称“名称”。
有谁知道如何解决这个问题?
我有一个DataGridView
小部件的窗体,我需要获取所选列名的索引。datagridview列索引
例如,假设我有一个包含2列的表格:姓名,姓氏。我需要一种方法来获取列名称的索引。问题在于,它始终根据DataSource
进行更改,但该列始终具有相同的名称“名称”。
有谁知道如何解决这个问题?
来检索名称DataGridView
列,您只需通过列集合索引引用它:
datagridview1.Columns["columnName"].Index;
请注意,如果:
datagridview1.Columns["columnName"]
然后你可以从该列获取列索引您使用无效的列名称,则此引用将返回null,因此您可能需要在使用该列引用之前检查该列引用是否为空,或者先使用列集合.Contains()
方法。
如果我是对的,e.ColumnIndex
也适用于此。你可以查看MSDN文档here
您可以通过使用the Index property of the DataGridViewColumn widget的景气指数,因为这样:
ColumnName.Index
这避免了检查在运行时,列名是否有效,因为它会产生的需求如果该列不存在,则为编译错误。这也使得重构更容易。
我建议您给列指定一个明智的名称(例如DCOL_SomeName
),以便您可以轻松区分它们。如果在同一表单上有多个DataGridView
小部件,则包含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");
为了安全起见(其它用户)下面你应该检查是否列第一存在:datagridview1 .Columns.Contains(“ColumnName”) – ginalster
@ginalster谢谢 - 好点,我已经添加到答案。 –
这是怎么回事呢? – Neolisk