在C#中从DataTable获取单元格值

63

这里有一个拥有大量数据的DataTable dt

我想要从DataTable中获取特定的单元格值,比如说Cell[i,j]。其中i代表行数,j代表列数。我将使用两个for循环来迭代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;
    }
}
6个回答

143

DataRow还具有一个索引器

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

但我更喜欢强类型的Field扩展方法,它还支持可空类型

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

使用列名称甚至可以使其更易读且更少出错:

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

主要,我的工作已完成。谢谢/ 但是我的所有列都不是字符串。有些是双精度和整型的。我该如何使用Field<string>扩展方法? - Abdur Rahim
@decoyer:那是一种通用的方法,您可以将其与任何类型一起使用。编辑了我的答案,以演示如何使用“int”和“double”。 - Tim Schmelter
好的。没问题。但是我在两个循环(For)中执行这些代码。当j改变时,数据类型可能会改变。我正在提供我的代码以使其更好。我正在编辑我的问题。 - Abdur Rahim
在这种情况下,保持简单的索引器,因为您不知道它是什么类型。 - Tim Schmelter

14

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

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

7
您可以按照以下方式遍历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单元格中的数据类型,您可以将对象转换为所需类型。


5

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

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);。 - martin wang

2
您也可以直接在datatable变量上调用索引器:
var cellValue = dt[i].ColumnName

-2
如果我理解您的问题正确,您想要显示填充数据表中的一个特定单元格?这是我用来在我的DataGrid中显示给定单元格的方法。
var s  = dataGridView2.Rows[i].Cells[j].Value;
txt_Country.Text = s.ToString();

希望这能有所帮助。

5
DataRow中没有“Cells”的定义。 - Happy Bird

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接