/// <summary>
/// C#中DataGridView与DataTable中同步删除与刷新数据
/// C#的Winform开发中删除DATAGRIDVIEW与DATAtABLE的数据,并新
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
// 1. 强制提交当前编辑
//dataGridView1.EndEdit();
// 2. 获取选中的行(逆序排序)
var rowsToDelete = dataGridView1.SelectedCells
.Cast<DataGridViewCell>()
.Select(cell => cell.OwningRow)
.Distinct()
.Where(row => !row.IsNewRow) // 过滤新行
.OrderByDescending(row => row.Index)
.ToList();
// 3. 操作 DataTable 删除数据
if (dataGridView1.DataSource is DataTable dataTable)
{
foreach (DataGridViewRow row in rowsToDelete)
{
if (row.DataBoundItem is DataRowView rowView)
{
DataRow dataRow = rowView.Row;
// 如果是新增但未提交的行,拒绝更改
if (dataRow.RowState == DataRowState.Added)
{
dataRow.RejectChanges(); // 直接丢弃新增行
}
else
{
dataTable.Rows.Remove(dataRow); // 正常删除已提交的行
}
}
}
#region 新增数据
DataRow newRow = dataTable.NewRow();
newRow["id"] = 0;
newRow["name"] = "新名" + DateTime.Now.ToString("yyyyMMddhhmmss");
newRow["isdelete"] = 1;
_dt.Rows.Add(newRow);
dataGridView1.Refresh();
#endregion
DataRow[] newDrArray = _dt.Select("id=0");
foreach (DataRow r in newDrArray)
{
MessageBox.Show(r["name"].ToString());
}
MessageBox.Show(dataGridView1.Rows.Count + "==" + dataTable.Rows.Count + "新增加的:" + _dt.Select("id=0").Count());
}
// 4. 刷新界面绑定(可选)
dataGridView1.Refresh();
}
查看更多关于C#中DataGridView与DataTable中同步删除与刷新数据的详细内容...