55

这是一个DataTable dt,其中包含大量数据。

我想从 DataTable中获取特定的单元格值,比如Cell[i,j]。其中,i -> 行和 j -> 列。我将用两个迭代 i,j 的值forloops

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

这是代码:

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

6 回答 6

131

DataRow也有一个索引

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

但我更喜欢Field也支持可空类型的强类型扩展方法:

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

甚至更易读且不易出错的列名称:

double otherNumber = dt.Rows[i].Field<double>("DoubleColumn");
于 2012-12-11T08:45:53.507 回答
13

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

var cellValue = dt.Rows[i][j];
于 2012-12-11T08:45:08.450 回答
5

你可以这样迭代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单元格中数据的类型,您可以将对象转换为您想要的任何内容。

于 2012-12-11T08:48:28.767 回答
3

要获取单元格列名称以及单元格值:

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

}
于 2019-03-29T08:29:14.230 回答
1

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

var cellValue = dt[i].ColumnName
于 2014-10-05T12:34:02.680 回答
-2

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

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

希望这可以帮助

于 2017-06-01T09:24:38.027 回答