从 C# 中的数据表中获取单元格值

Posted

技术标签:

【中文标题】从 C# 中的数据表中获取单元格值【英文标题】:Get Cell Value from a DataTable in 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;
    

【问题讨论】:

【参考方案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 不包含“单元格”的定义。

以上是关于从 C# 中的数据表中获取单元格值的主要内容,如果未能解决你的问题,请参考以下文章

获取 ASP.NET GridView 单元格值并在 JQuery 进度条中显示

如何通过 JavaScript 获取 html 表格 td 单元格值?

忽略其中包含公式的空单元格值

从 Power Query 中的单元格值中提取数据类型?

Excel:使用单元格值作为 SQL 查询的参数

如何使用开放的 XML C# 从 .xlsx 获取单元格中显示的值