DataGridView选择行到DataTable

我正在尝试仅将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; } } 

您必须访问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();