根据行中的值获取列索引

时间:2019-05-06 07:55:59

标签: c#

我想基于包含“ TOTAL”的第一行中的值获取列索引。我发现基于行值而不是列来获取列索引完全不同。

enter image description here

我尝试过此操作,它显示列索引为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));

2 个答案:

答案 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);