如何通过列名获取列索引?

Mic*_* DN 5 c# datagrid indexof winforms

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

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

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...
Run Code Online (Sandbox Code Playgroud)

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

int  colIndex = dtGrid.Columns.IndexOf(dtGrid.Columns[strQ2]);
Run Code Online (Sandbox Code Playgroud)

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

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

我在这里做错了什么?

Fab*_*jan 8

您可以先使用 LINQ FirstOrDefault 获取对象,然后才使用 .IndexOf(object) :

var targetColumn = dtGrid.Columns.FirstOrDefault(c => c.Header == strQ2);
var index = dtGrid.Columns.IndexOf(targetColumn);
Run Code Online (Sandbox Code Playgroud)


Tim*_*ter 8

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

int index = dtGrid.Columns.ToList().FindIndex(c => c.Header  == strQ2);
Run Code Online (Sandbox Code Playgroud)

如果不是 WPF DataGrid(这似乎是由于Header属性)而是一个DataGridView没有实现泛型集合类型的 winforms ,则需要先对其进行转换,然后才能使用 LINQ 方法:

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

  • @MrinalKamboj:接受的方法需要枚举列集合两次。但是,由于没有一千列,这不是问题。 (2认同)