从 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 是正确的,但网格视图中没有显示任何信息,感谢任何帮助,干杯!
这里发生了一些事情:
- 您的第二个
foreach
循环每次迭代都会添加一个全新的 DataRow
。尽管该行从未填充 - 因此 DataGridView
仅显示空行。
- 即使您修复了此错误,
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);
}
我正在尝试 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 是正确的,但网格视图中没有显示任何信息,感谢任何帮助,干杯!
这里发生了一些事情:
- 您的第二个
foreach
循环每次迭代都会添加一个全新的DataRow
。尽管该行从未填充 - 因此DataGridView
仅显示空行。 - 即使您修复了此错误,
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);
}