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

Abd*_*him 39 .net c# datatable

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

我想从DataTable中获取特定的Cell值,比如Cell [i,j].哪里,我 - >行和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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 96

DataRow也有一个索引:

Object cellValue = dt.Rows[i][j];
Run Code Online (Sandbox Code Playgroud)

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

int number = dt.Rows[i].Field<int>(j);
Run Code Online (Sandbox Code Playgroud)

使用列的名称甚至更具可读性且不易出错:

double otherNumber = dt.Rows[i].Field<double>("DoubleColumn");
Run Code Online (Sandbox Code Playgroud)


Cha*_*nga 10

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

var cellValue = dt.Rows[i][j];
Run Code Online (Sandbox Code Playgroud)


Nik*_*vic 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();
        }
}
Run Code Online (Sandbox Code Playgroud)

根据DataTable单元格中数据的类型,可以将对象投射到所需的任何对象。


Adr*_*rma 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);

}
Run Code Online (Sandbox Code Playgroud)