gpt4 book ai didi

c# - 删除 DataGridView(表)中的多行

转载 作者:行者123 更新时间:2023-11-30 12:49:39 24 4
gpt4 key购买 nike

我有一个数据表“myTable”,它与 DataGridView“dgv”绑定(bind)。 DataGridView“dgv”有一个复选框列。我的目标是删除在按钮事件中选中的行。数据表当然会更新。现在我的代码只适用于删除一行而不适用于多行。

感谢您的帮助。

 private void btnDel_Click(object sender, EventArgs e)
{
try
{
if (dgv.RowCount>0)
{
foreach (DataGridViewRow row in dgv.Rows)
{
DataGridViewCheckBoxCell check = row.Cells[0] as DataGridViewCheckBoxCell;
if (check.Value != null)
{
if ((bool)check.Value)
{
DataRowView currentDataRowView = (DataRowView)dgv.CurrentRow.DataBoundItem;
DataRow dataRow = currentDataRowView.Row;

int n = dgv.CurrentRow.Index;
int intID = Convert.ToInt32(dgv.Rows[n].Cells[0].Value);
myTable.Rows.Remove(dataRow);
dgv.DataSource = myTable;

Int32 intVal = Convert.ToInt32(row.Cells[1].Value);
if (intVal == intID)
{
check.Value = null;
}
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

最佳答案

我找到了解决方案。错误是由

 DataRowView currentDataRowView = (DataRowView)dgv.CurrentRow.DataBoundItem; 

currentDataRowView 不是选中的行。正确的代码是:

                List<DataRow> toDelete = new List<DataRow>(); 
for (int i = 0; i < dgv.Rows.Count; i++)
{
{
DataGridViewRow row = dgv.Rows[i];
DataGridViewCheckBoxCell check = row.Cells[0] as DataGridViewCheckBoxCell;
if (check.Value != null && (bool)check.Value)
{
DataRow dataRow = (row.DataBoundItem as DataRowView).Row;
toDelete.Add(dataRow);
}
}
}
toDelete.ForEach(row => row.Delete());

感谢大家的帮助。

关于c# - 删除 DataGridView(表)中的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11107369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com