如何按列名获取列索引?

时间:2015-07-14 10:44:40

标签: c# winforms datagrid indexof

我有一个数据网格,列数很少 -

网格的标题是超链接,我在运行时设置其值如下 -

string strQ1 = "<a href='somePage.aspx?ID=1'>gfgytyty<a>";
dtGrid.Columns[0].Header = strq1;

string strQ2 = "<a href='somePage.aspx?ID=2'>yhtryrtuyu<a>";
dtGrid.Columns[1].Header = strq2;

and so on...

工作正常。 现在假设我想通过其名称得到datatgrid的特定列的索引,但我无法得到它。 我试过了

int  colIndex = dtGrid.Columns.IndexOf(dtGrid.Columns[strQ2]);

这应该作为columnIndex返回1,但它返回-1,

另外,dtGrid.Columns [strQ2]给我空值。

我在这里做错了什么?

3 个答案:

答案 0 :(得分:4)

尝试使用LINQ FirstOrDefault来获取对象,然后才使用.IndexOf(object):

dtGrid.Columns.IndexOf(dtGrid.Columns.FirstOrDefault(c => c.Header == strQ2));

答案 1 :(得分:4)

这是使用List.FindIndex的另一种方法:

int index = dtGrid.Columns.ToList().FindIndex(c => c.Header  == strQ2);

如果它不是WPF DataGrid(它似乎是由于Header属性),而是一个没有实现通用的winforms DataGridView集合类型,您需要在使用LINQ方法之前进行转换:

var columnList = dtGrid.Columns.Cast<DataGridViewColumn>().ToList();
int index = columnList.FindIndex(c => c.HeaderText  == strQ2);

答案 2 :(得分:-2)

为什么不呢?

int index = myDataGridView.Columns["myColumn"].Index;