从 datagridview 中选择数据并重新插入选择 c#

Selecting Data from datagridview and re-inserting selection c#

我正在尝试 select 来自 datagridview 的一组行并通过单击按钮更新它以在同一视图中仅显示 selected 信息,这里是我目前拥有的代码:

  private void btnUpdate_Click(object sender, EventArgs e)
    {
        List<DataGridViewRow> rowCollection = new List<DataGridViewRow>();
        foreach (DataGridViewRow row in dataGridView1.SelectedRows) {
            rowCollection.Add(dataGridView1.Rows[row.Index]); 
        }


        dataset.Tables[0].Clear();


        foreach (DataGridViewRow row in rowCollection)
        {
            DataRow r = dataset.Tables[tableName].NewRow();
            //write the data in the DataRow and then add the datarow in your datatable
            dataset.Tables[tableName].Rows.Add(r);


        }
    }

按下更新按钮后没有错误,行数 selected 是正确的,但网格视图中没有显示任何信息,感谢任何帮助,干杯!

这里发生了一些事情:

  1. 您的第二个 foreach 循环每次迭代都会添加一个全新的 DataRow。尽管该行从未填充 - 因此 DataGridView 仅显示空行。
  2. 即使您修复了此错误,dataset.Tables[0].Clear(); 也会先清空数据,然后您才能在同一循环中使用它。 rowCollection 中的每一行都有 null 条数据。

为了纠正这个问题,我们将克隆目标 DataTable。然后我们将使用 DataRowCollection.Add(params object[] values) 而不是 DataRowCollection.Add(DataRow row)rowCollection 中的每一行添加到克隆的 table 中。之后,我们将清除目标 table 并将克隆合并回其中。

private void btnUpdate_Click(object sender, EventArgs e)
{
    List<DataGridViewRow> rowCollection = new List<DataGridViewRow>();

    foreach (DataGridViewRow row in dataGridView1.SelectedRows)
    {
        // Adds the selected rows in order from most recently selected to first selected.
        rowCollection.Add(dataGridView1.Rows[row.Index]);

        // Adds the selected rows in order from first selected to most recently selected.
        //rowCollection.Insert(0, dataGridView1.Rows[row.Index]);
    }

    DataTable clone = this.DataSet.Tables[0].Clone();

    foreach (DataGridViewRow row in rowCollection)
    {
        object[] values = new object[row.Cells.Count];

        for (int i = 0; i < row.Cells.Count; i++)
        {
            values[i] = row.Cells[i].Value;
        }

        clone.Rows.Add(values);
    }

    this.DataSet.Tables[0].Clear();
    this.DataSet.Tables[0].Merge(clone);
}