我正在尝试将数据从我的datagridview复制到数据表,以便我可以导出到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;
}
好像它将数据从网格复制到表中,但当我返回数据表时,所有列都没有行
答案 0 :(得分: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;
}
答案 1 :(得分: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());
这应解释为更简单地向数据表中添加行:)