【发布时间】:2012-06-21 20:53:10
【问题描述】:
我有一个可数据的“myTable”,它与 DataGridView“dgv”绑定。 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);
}
}
【问题讨论】:
-
你有异常吗?我的猜测是,当您在集合更改时删除第一行时,foreach 应该会产生异常。
-
一点也不例外。好像没有循环foreach,
-
尝试将其从 foreach 循环中移除:myTable.Rows.Remove(dataRow);
-
我不这么认为,它只会删除一行并且可能会出现异常,因为 dataRow 是在 foreach 循环中定义的。
-
哦,对不起,复制粘贴错误,我想到了这一行:dgv.DataSource = myTable;
标签: c# winforms datagridview