【发布时间】:2021-04-28 19:47:30
【问题描述】:
考虑一个DataGridView,其DataSource 是一个DataTable。 dataGridView 允许一次选择一行。有一个“删除”按钮,它应该从绑定的数据表中删除选定的行,按列之一。
从用户的角度来看,我已将DataGridView 配置为不可编辑。应该只能通过我创建的单独的“删除”Button 删除一行(从数据表和网格中)。其事件处理程序如下所示:
private void delete_Click(object sender, EventArgs args)
{
var usersTable = myGridView.DataSource as DataTable;
foreach (DataGridViewRow selected in myGridView.SelectedRows)
{
string name = (string)selectedRow.Cells[0].Value;
foreach (DataRow tableRow in usersTable.Rows)
{
if (tableRow["Name"].ToString().Equals(name))
tableRow.Delete();
}
usersTable.AcceptChanges();
}
myGridView.DataSource = usersTable;
}
如何正确执行此操作,而不出现“集合已修改,枚举可能无法执行”错误?
网格填充如下:
private DataTable usersTable = new DataTable("Users");
void Populate()
{
usersTable.Columns.Clear();
usersTable.Rows.Clear();
usersTable.Columns.Add("Name", typeof(string));
// addd other columns...
foreach (var user in usersCollection)
{
usersTable.Rows.Add(user.GetName()),
// add other rows...
}
// bind the data
myGridView.DataSource = usersTable;
}
【问题讨论】:
-
DataGridView将允许用户简单地按下Delete键来删除选定的行。无需代码。 -
@ŇɏssaPøngjǣrdenlarp 绑定的
DataTable会受此影响吗?这是重要的部分。 -
@Al2110 yes...当用户通过按下
Delete键从GridView中删除行时,相应的行也将从绑定到GridView的DataTable中删除。 -
@ChetanRanpariya 我认为这里有些混乱。我已将
DataGridView配置为从用户的角度来看是不可编辑的。因此,从表中删除一行的唯一方法是以编程方式。我试图通过添加一个单独的“删除”Button来实现这一点,其点击事件处理程序具有上面的代码。单击该按钮会引发“集合已修改;枚举可能无法执行”。我希望能够从DataTable中删除选定的行,然后将其重新绑定到DataGridView。 -
我有一个可能的解决方案来解决您的问题...在此之前您能解释一下如何将 DataGridView 绑定到 DataTable 吗? DataTable 是在表单级别创建的吗?您还可以提一下您的情况下的 DataGridView 用户无法编辑的事实吗?
标签: c# .net winforms datatable datagridview