DataGridView 选择的行到 DataTable

Posted

技术标签:

【中文标题】DataGridView 选择的行到 DataTable【英文标题】:DataGridView selected rows to DataTable 【发布时间】:2013-11-07 12:16:17 【问题描述】:

我正在尝试仅将 DataGridView 的选定行添加到 DataTable 中,我使用的代码始终从第一行开始,即使未选择此行...有人知道如何请解决这个问题?

 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;
                
            

【问题讨论】:

【参考方案1】:
DataTable dt = ((DataTable)dgvQueryResult.DataSource).Clone();
foreach (DataGridViewRow row in dgvQueryResult.SelectedRows)

    dt.ImportRow(((DataTable)dgvQueryResult.DataSource).Rows[row.Index]);

dt.AcceptChanges();

【讨论】:

【参考方案2】:

你必须访问SelectedRowslike

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;
                                   //^^^^^^^^^^^
     
 

【讨论】:

谢谢 Habib,这很有帮助。

以上是关于DataGridView 选择的行到 DataTable的主要内容,如果未能解决你的问题,请参考以下文章

C#选择并滚动到DataGridView中选择的行

如何使 DataGridView 显示选定的行?

如何从DataGridView中的行获取DataRow

C# 语言单击DataGridView的行参数传递到另一个窗体

SQL 查询中的行到列

简洁的行到 json