DataGridView 将选定的行保存到数据表

本文关键字:保存 数据表 DataGridView | 更新日期: 2023-09-27 18:37:05

我尝试仅将 DataGridView 的选定行添加到数据表中,即使未选择此行,我使用的代码也始终从第一行开始......有人对如何解决这个问题有想法吗?

DataTable dt = new DataTable("Rapport");
// Generating columns to datatable
foreach (DataGridViewColumn column in dataGridView1.Columns)
    dt.Columns.Add(column.Name, typeof(string));
// Adding selected rows of DGV to DataTable
for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
{
    dt.Rows.Add();
    for (int j = 0; j < dataGridView1.Columns.Count; j++)
    {
        dt.Rows[i][j] = dataGridView1[j, i].Value;
    }
}

DataGridView 将选定的行保存到数据表

您必须

访问SelectedRows

dt.Rows[i][j] = dataGridView1.SelectedRows[i].Cells[j].Value;

如果您的DataTable与 Cell 的类型相同,那就更好了

DataTable dt = new DataTable();
 foreach (DataGridViewColumn column in dataGridView1.Columns)
    dt.Columns.Add(column.Name, column.CellType); //better to have cell type

所以你的代码将是:

DataTable dt = new DataTable();
foreach (DataGridViewColumn column in dataGridView1.Columns)
    dt.Columns.Add(column.Name, column.CellType); //better to have cell type
for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
{
     dt.Rows.Add();
     for (int j = 0; j < dataGridView1.Columns.Count; j++)
     {
         dt.Rows[i][j] = dataGridView1.SelectedRows[i].Cells[j].Value;
                                   //^^^^^^^^^^^
     }
 }
DataTable dt = ((DataTable)dgvQueryResult.DataSource).Clone();
foreach (DataGridViewRow row in dgvQueryResult.SelectedRows)
{
    dt.ImportRow(((DataTable)dgvQueryResult.DataSource).Rows[row.Index]);
}
dt.AcceptChanges();