web-dev-qa-db-ja.com

C#のDataTableからセル値を取得する

ここにDataTable dtがあり、これには多くのデータがあります。

DataTableから特定のCell Value、たとえばCell [i、j]を取得します。ここで、i->行およびj->列。 i、jの値を2つの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;
    }
}
39
Abdur Rahim

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");
95
Tim Schmelter

おそらくセルとしてではなく、Rowsから参照する必要があります。

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

次のように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(dataList);

}
1
Adrita Sharma

データテーブル変数でインデクサーを直接呼び出すこともできます。

var cellValue = dt[i].ColumnName
0
Emre Inan