如何通过列名获取列索引?
how to get column Index by column name?
我有一个包含几列的数据网格-
网格的header是超链接,我在运行时设置它的值如下-
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]);
这应该 return 1 作为 columnIndex 但它是 returning -1,
此外,dtGrid.Columns[strQ2] 给我空值。
我做错了什么?
您可以先使用 LINQ FirstOrDefault 获取对象,然后再使用 .IndexOf(object) :
var targetColumn = dtGrid.Columns.FirstOrDefault(c => c.Header == strQ2);
var index = dtGrid.Columns.IndexOf(targetColumn);
这是使用 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);
我有一个包含几列的数据网格-
网格的header是超链接,我在运行时设置它的值如下-
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]);
这应该 return 1 作为 columnIndex 但它是 returning -1,
此外,dtGrid.Columns[strQ2] 给我空值。
我做错了什么?
您可以先使用 LINQ FirstOrDefault 获取对象,然后再使用 .IndexOf(object) :
var targetColumn = dtGrid.Columns.FirstOrDefault(c => c.Header == strQ2);
var index = dtGrid.Columns.IndexOf(targetColumn);
这是使用 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);