【问题标题】:Get a string value from a data table row using the data table's first row as identifier使用数据表的第一行作为标识符从数据表行中获取字符串值
【发布时间】:2018-01-03 01:45:20
【问题描述】:

我搜索了几个线程,似乎找不到 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 时,我需要通过利用第一行值来获取该“单元格的值。我每次都需要当前单元格。

【问题讨论】:

  • 您的代码似乎缺少一些花括号。请edit您的代码包含缺少的字符,并添加适当的缩进。
  • Appologies...对输入按钮很满意
  • @Matt,只是一个建议,试着正确命名你的变量,这样更容易阅读和理解你的代码
  • i 稍后会在您的代码中引发 IndexOutOfRangeException
  • 我不清楚您要做什么。标题/行 [0] 是什么意思?如果您总是查看第一行,为什么要遍历所有行?

标签: c#


【解决方案1】:

可以通过引用行[索引]和列名字符串来获取任意单元格的值

string xyz= dt.Rows[0]["columnName"].ToString();

【讨论】:

  • 这是“第一个”列名字符串正确吗?第 0 行 .. 因为我已经尝试过了,但它似乎不起作用。例如,在 dt 的“第五次”迭代中,我将位于第 4 行和一个字符串“foo”。我所拥有的只是 dt 的 0 单元格字符串;不是“富”。我只需要使用该行及其“第一”行字符串(dt 行中的元素 0)来获取“foo”
  • 这是一个公共财产,所以它必须在那里,试试这个链接codeproject.com/Questions/437500/…
【解决方案2】:

好的,假设List&lt;string&gt; text 参数包含数据表中第一行(不是列名)的值,并且您希望在每一行中获取相应的单元格,例如这应该可以工作(还没有测试过)

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;
}

【讨论】:

  • 好的,试试上面的解决方案。基本思路是在字符串列表中设置每个值对应的列索引,然后在遍历数据表时使用该索引
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-16
  • 2011-10-02
相关资源
最近更新 更多