我需要将数据从 DataGridView 导出到 Excel,但只能导出选定的单元格。DataGridView 绑定到 DataTable。我看过很多关于如何复制选定行的示例,但找不到关于如何仅将选定单元格复制到新 DataTable 中的示例。到目前为止,这是我尝试过的:
//First, copy structure of DataTable into new one
DataTable dt = ((DataTable)dgv.DataSource).Clone();
//Then insert data into new datatable
foreach (DataGridViewCell cell in dgv.SelectedCells)
{
//We get Index of column and row from bounded DataTable
int col_indx = ((DataTable)dgv.DataSource).Columns.IndexOf(dgv.Columns[cell.ColumnIndex].Name);
int row_indx = ((DataTable)dgv.DataSource).Rows.IndexOf(((DataRowView)dgv.Rows[cell.RowIndex].DataBoundItem).Row);
//First check if row already exists
if (dt.Columns.Contains(dgv.Columns[cell.ColumnIndex].Name))
{
DataRow newrow = dt.NewRow();
newrow[col_indx] = cell.Value;
dt.Rows.InsertAt(newrow, row_indx);
}
else
{
dt.Rows[row_indx][cell_indx] = cell.Value;
}
}
dt.AcceptChanges();
这部分将数据插入到新的数据表中,但如果我从同一行中选择一些单元格,则在不同的行中。我怎样才能解决这个问题 ?
编辑:
for (int i = 0; i < dgv.Rows.Count; i++)
{
dt.Rows.Add();
for (int j = 0; j < dgv.ColumnCount; j++)
{
if (dgv.Rows[i].Cells[j].Selected == true)
{
dt.Rows[i][j] = dgv.Rows[i].Cells[j].Value;
}
}
}
dt.AcceptChanges();
这是我能实现的最接近的事情。它将选定的数据复制到新的 DataTable 中,但不幸的是它也保留了空行。因此,当我从例如第 3 行选择 Datagridview 中的单元格时,Excel 中的输出将前 2 行为空。我想避免这种情况,但是如何呢?...换句话说,我在 Datagridview 中选择的内容必须从第 1 行的新数据表开始,依此类推...
不负相思意
慕田峪9158850
慕少森
相关分类