C# 如何按列名获取列索引?
我有一个数据网格,只有很少的列- 网格的标题是hyperlink,我在运行时设置它的值,如下所示-C# 如何按列名获取列索引?,c#,winforms,datagrid,indexof,C#,Winforms,Datagrid,Indexof,我有一个数据网格,只有很少的列- 网格的标题是hyperlink,我在运行时设置它的值,如下所示- 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].Hea
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...
这应该返回1作为columnIndex,但返回的是-1
还有dtGrid.Columns[strQ2]给我空值。
我做错了什么?您可以使用LINQ FirstOrDefault先获取对象,然后才使用.IndexOf(对象):
下面是使用
List.FindIndex
的另一种方法:
int index = dtGrid.Columns.ToList().FindIndex(c => c.Header == strQ2);
如果不是WPFDataGrid
(这似乎是由于Header
属性造成的),而是winformsDataGridView
未实现泛型集合类型,则需要先强制转换它,然后才能使用LINQ方法:
var columnList = dtGrid.Columns.Cast<DataGridViewColumn>().ToList();
int index = columnList.FindIndex(c => c.HeaderText == strQ2);
var columnList=dtGrid.Columns.Cast().ToList();
int index=columnList.FindIndex(c=>c.HeaderText==strQ2);
wpf datagrid或winforms datagridview?这是-dtGrid.Columns[strQ2]导致有效的DataGridColumn对象,请验证,这可能是一个问题。在您的例子中,我可以看到您将strq2指定为头,但在IndexOf中使用strq2call@MrinalKamboj是的,你是对的!!dtGrid.Columns[strQ2]提供空值。你能告诉我解决方法吗?你确定它是正确的吗?没有列
属性的。但是DataGridViewColumn
没有Header
,而是HeaderText
属性。也许您指的是wpf,其中的列具有标题
属性。请不要混淆所有内容。在最初的解决方案中,您是否可以尝试将dtGrid.Columns[strQ2]类型转换为DataGridColumn并进行检查,因为您使用的是一种对象类型,它在Equals方法中进行引用比较这将是一种O(n)解决方案,而不是使用Linq查询preferable@MrinalKamboj:接受的方法需要枚举列集合两次。但是,由于没有上千列,这不是问题。如果我想检查c.Header
是否包含值,该怎么办?
int index = dtGrid.Columns.ToList().FindIndex(c => c.Header == strQ2);
var columnList = dtGrid.Columns.Cast<DataGridViewColumn>().ToList();
int index = columnList.FindIndex(c => c.HeaderText == strQ2);