我想基于包含“ TOTAL”的第一行中的值获取列索引。我发现基于行值而不是列来获取列索引完全不同。
我尝试过此操作,它显示列索引为0,但应该为19
var badColumns = dt.Rows[0].ItemArray.Where (c => c.ToString().Contains("TOTAL QTY")).Select((c, i) => i).ToArray();
MessageBox.Show(string.Join(",", badColumns));
答案 0 :(得分:1)
您的问题是,在对列进行索引之前要对其进行过滤,您应该这样做:
var badColumns = dt.Rows[0].ItemArray
.Select((c, i) => new{c,i})
.Where(x => x.c.ToString().Contains("TOTAL QTY"))
.Select(x => x.i)
.ToArray();
MessageBox.Show(string.Join(",", badColumns));
答案 1 :(得分:0)
您正在调用数组类的ToString()方法,它将显示该内容。 我想这就是您要寻找的东西:
for(int i = 0; i < badColumns.Length; i++)
{
MessageBox.Show(badColumns[i].ToString());
}
这将为badColums数组中的每个元素显示一个消息框,并将调用对象的ToString方法。
如果只希望一个包含所有元素的MessageBox,请执行以下操作:
string badColumnsString = "";
for(int i = 0; i < badColumns.Length; i++)
{
badColumnsString += badColumns[i].ToString() + " ";
}
badColumnsString = badColumnsString.TrimEnd(' ');
MessageBox.Show(badColumnsString);