Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何按列名获取列索引?_C#_Winforms_Datagrid_Indexof - Fatal编程技术网

C# 如何按列名获取列索引?

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

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

网格的标题是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].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);
如果不是WPF
DataGrid
(这似乎是由于
Header
属性造成的),而是winforms
DataGridView
未实现泛型集合类型,则需要先强制转换它,然后才能使用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);