好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#中DataGridView与DataTable中同步删除与刷新数据

/// <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中同步删除与刷新数据的详细内容...

  阅读:31次