使用数据表的第一行作为标识符

时间:2018-01-02 17:07:59

标签: c#

我搜索了几个线程,似乎无法找到C#解决方案。我在C#中有一个字符串列表和一个数据表。我需要能够遍历我的数据表的行,然后遍历我的列表以获取标题值(row[0])并使用它来分配给变量。

这是我到目前为止所做的:

    private void setInformation(DataTable dt, List<string> text)
    {

       foreach(DataRow row in dt.Rows)
       {

         if (dt.Rows.IndexOf(row) != 0)
           {

              for (int i = 0; i <= text.Count; i++)
                {
                  string s;
                  string ValueNeeded; 

                  s = text[i];

                 ValueNeeded = dt.Columns.IndexOf(text).ToString(); 
                 //needs to be the current dt rows value for the header / 
                 //row(0) with that string identifier

                 //in VB its something like 
                 //DT.Rows(0).Item(text).ToString
                  }
              }
       }
}

我所拥有的只是第一行的字符串值;当我遍历DT时,我需要通过利用第一行值来获得&#34;单元格的值。我每次都需要当前的单元格。

2 个答案:

答案 0 :(得分:1)

您可以通过引用行[index]和列名字符串

来获取任何单元格的值
string xyz= dt.Rows[0]["columnName"].ToString();

答案 1 :(得分:1)

好的,假设List<string> text参数包含DataTable中第一行(而不是列名)的值,并且您希望获得每行中相应的单元格,像这样的东西应该工作(没有测试过)

private void setInformation(DataTable dt, List<string> text)
{
    var cache = new Dictionary<string, int>(); //cache column numbers
    foreach(var entry in text) cache[entry] = getColumnNumberByValue(dt, entry);

    for(int i=1; i < dt.Rows.Count; i++)
    {
        foreach(var entry in text)
        {
            var columnIndex = cache[entry];
            if(columnIndex != -1)
            {
                var valueNeeded = dt.Rows[i][columnIndex].ToString();
            }
        }
    }
}

private int getColumnNumberByValue(DataTable dataTable, string text)
{
    for(int i=0; i < dataTable.Columns.Count; i++)
    {
        if(dataTable.Rows[0][i].ToString() == text) return i;
    }
    return -1;
}