【问题标题】:Get Cell Value from a DataTable in C#从 C# 中的数据表中获取单元格值
【发布时间】:2012-11-28 18:48:27
【问题描述】:

这是一个DataTable dt,它有很多数据。

我想从 DataTable 中获取特定的 Cell Value,例如 Cell[i,j]。在哪里, i -> 行和 j -> 列。我将用两个forloops 迭代 i,j 的值。

但我不知道如何通过索引调用单元格。

代码如下:

for (i = 0; i <= dt.Rows.Count - 1; i++)
{
    for (j = 0; j <= dt.Columns.Count - 1; j++)
    {
        var cell = dt.Rows[i][j];
        xlWorkSheet.Cells[i + 1, j + 1] = cell;
    }
}

【问题讨论】:

    标签: c# .net datatable


    【解决方案1】:

    DataRow 也有一个indexer

    Object cellValue = dt.Rows[i][j];
    

    但我更喜欢强类型的Field 扩展方法,它也支持nullable types

    int number = dt.Rows[i].Field<int>(j);
    

    或者更易读,更不容易出错的列名:

    double otherNumber = dt.Rows[i].Field<double>("DoubleColumn");
    

    【讨论】:

    • 首先,我的工作已经完成。谢谢/但我所有的列都不是字符串。有些是双精度的。我如何使用 Field 扩展方法?
    • @decoyer:这是一个通用方法,你可以将它用于任何类型。编辑了我的答案以使用intdouble 进行演示。
    • 好的。美好的。但我在两个循环(For)中执行这些代码。当 j 改变时,数据类型可能会改变。我正在提供我的代码以使其变得更好。我正在编辑我的问题。
    • @decoyer:在这种情况下,请继续使用简单的索引器,因为您不知道它是什么类型。
    【解决方案2】:

    您可能需要从Rows而不是作为单元格引用它:

    var cellValue = dt.Rows[i][j];
    

    【讨论】:

      【解决方案3】:

      你可以像这样迭代DataTable

      private void button1_Click(object sender, EventArgs e)
      {
          for(int i = 0; i< dt.Rows.Count;i++)
              for (int j = 0; j <dt.Columns.Count ; j++)
              {
                  object o = dt.Rows[i].ItemArray[j];
                  //if you want to get the string
                  //string s = o = dt.Rows[i].ItemArray[j].ToString();
              }
      }
      

      根据DataTable 单元格中的数据类型,您可以将对象转换为任何您想要的对象。

      【讨论】:

        【解决方案4】:

        获取单元格列名和单元格值:

        List<JObject> dataList = new List<JObject>();
        
        for (int i = 0; i < dataTable.Rows.Count; i++)
        {
            JObject eachRowObj = new JObject();
        
            for (int j = 0; j < dataTable.Columns.Count; j++)
            {
                string key = Convert.ToString(dataTable.Columns[j]);
                string value = Convert.ToString(dataTable.Rows[i].ItemArray[j]);
        
                eachRowObj.Add(key, value);
        
            }
        
            dataList.Add(eachRowObj);
        
        }
        

        【讨论】:

        • 有一个错误,dataList.Add(dataList);应该是 dataList.Add(eachRowObj);
        【解决方案5】:

        您也可以直接在数据表变量上调用索引器:

        var cellValue = dt[i].ColumnName
        

        【讨论】:

          【解决方案6】:

          如果我正确理解了您的问题,您想显示填充数据表的一个特定单元格吗?这是我用来在我的 DataGrid 中显示给定单元格的内容。

          var s  = dataGridView2.Rows[i].Cells[j].Value;
          txt_Country.Text = s.ToString();
          

          希望对你有帮助

          【讨论】:

          • DataRow 不包含“单元格”的定义。
          猜你喜欢
          • 1970-01-01
          • 2020-03-25
          • 1970-01-01
          • 1970-01-01
          • 2011-10-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多