2

datagridviewからdatatableにデータをコピーして、csvファイルにエクスポートできるようにしようとしています

これがコードです

public DataTable createdatatablefromdgv()
   {
       DataTable dsptable = new DataTable();

       for (int i = 0; i < dataGridView1.Columns.Count; i++)
       {
           DataColumn dspcolumn = new DataColumn(dataGridView1.Columns[i].HeaderText);
           dsptable.Columns.Add(dspcolumn);
       }
       int noOfColumns = dataGridView1.Columns.Count;
       foreach (DataGridViewRow dgvr in dataGridView1.Rows)
       {
           DataRow dataRow = dsptable.NewRow();

           for (int i = 0; i < noOfColumns; i++)
           {
               dataRow[i] = dgvr.Cells[i].Value.ToString();
           }

       }
       return dsptable;
   }

グリッドからテーブルにデータをコピーしているように見えますが、データテーブルを返すと、すべての列に行がありません

4

2 に答える 2

5

列に値を割り当てた後、dataRowをデータテーブルに追加していません。

public DataTable createdatatablefromdgv()
{
   DataTable dsptable = new DataTable();

   for (int i = 0; i < dataGridView1.Columns.Count; i++)
   {
       DataColumn dspcolumn = new DataColumn(dataGridView1.Columns[i].HeaderText);
       dsptable.Columns.Add(dspcolumn);
   }
   int noOfColumns = dataGridView1.Columns.Count;
   foreach (DataGridViewRow dgvr in dataGridView1.Rows)
   {
       DataRow dataRow = dsptable.NewRow();

       for (int i = 0; i < noOfColumns; i++)
       {
           dataRow[i] = dgvr.Cells[i].Value.ToString();
       }
       dsptable.Rows.Add(dataRow); //Add this statement to add rows to Data Table

   }
   return dsptable;
}
于 2012-11-20T15:47:12.270 に答える
0

上記の答えは正しいですが、この問題が発生した理由について少し説明します。を呼び出すことによりNewRow()DataTableに新しい行を追加し、DataTableそれにアクセスできるようになると考えられます。

NewRow実際に行うことは、列識別子(整数)の代わりに列名を使用できるインスタンスを提供することですDataRow

これにより、次のようなことができます

DataRow dataRow = dsptable.NewRow();
foreach(DataColumn dc in dsptable.Columns)
{
   dataRow[dc.ColumnName] = dgvr.Cells[dc.ColumnName].Value.ToString()
}

Rows.Add()または、を実行しようとしていたときに、オブジェクト配列またはを取得する呼び出しを行うこともできますDataRow

List<string> rowData = new List<string>();
for (int i = 0; i < noOfColumns; i++)
{
   rowData.Add(dgvr.Cells[i].Value.ToString());
}
dsptable.Rows.Add(rowData.ToArray());

これは、データテーブルへの行の追加をより簡単に説明するはずです:)

于 2012-11-20T15:59:22.053 に答える