c#wpf - DataGrid删除选定的行
问题描述:
我正在使用c#,wpf,DataGrid,SqlDataAdapter,DataTable,MS Sql服务器 在主窗体上有一个DataGrid和一个按钮。 单击该按钮应从DataGrid选定行中删除。然后从数据库中。但是这没有发生!只有从DataGrid! 这里是我的代码:c#wpf - DataGrid删除选定的行
private void Button_DeleteSelectedRows_Click(object sender, RoutedEventArgs e)
{
try
{
if (dataGrid.SelectedItems.Count == 1)
{
int selectedIndex = dataGrid.SelectedIndex;
var row = dataTable.Rows[selectedIndex];
row.Delete();
dataAdapter.Update(dataTable);
}
else if (dataGrid.SelectedItems.Count > 1)
{
int count = dataGrid.SelectedItems.Count;
for (int i = count - 1; i >= 0; i--)
{
DataRowView rowView = dataGrid.SelectedItems[i] as DataRowView;
dataTable.AsEnumerable()
.Where(r => r["Name"].ToString() == rowView.Row["Name"].ToString())
.ToList()
.ForEach(r => r.Delete());
dataTable.AcceptChanges();
}
dataAdapter.Update(dataTable);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
P.S:我不会用MVVM
非常感谢您的帮助!
答
您可能会考虑将for循环重构为while循环,例如while(datagrid.SelectedItem.Count> = 1)。一般来说,在访问基于索引的集合时会遇到问题,以防删除循环中的项目。
调试提示:尝试检查for-loop循环中所选项目的计数,并检查对象是否存在@特定索引。
答
一切都是对的,我猜,删除以下语法从DataTable
使用行:
datatable.Rows.Remove((myGrid.SelectedItem as DataRowView).Row);
还是在第二个代码块:
DataRowView rowView = dataGrid.SelectedItems[i] as DataRowView;
datatable.Rows.Remove(rowView.Row);
然后在最后把
datatable.AcceptChanges();
应该适当反映变化。
答
对不起,没有回复,让你等待! 你的建议帮了我很多。 我已经决定了这样的话:
else if (dataGrid.SelectedItems.Count > 1)
{
while (dataGrid.SelectedItems.Count > 0)
{
int selectedIndex = dataGrid.SelectedIndex;
var row = dataTable.Rows[selectedIndex];
row.Delete();
dataAdapter.Update(dataTable);
}
}
[解决]
目前我正在认真思考改变应用程序MVVM:d:d
答
此代码删除所选行。请确保
while (Mydatagrid.SelectedItems.Count >= 1)
{
DataRowView drv = (DataRowView)Mydatagrid.SelectedItem;
drv.Row.Delete();
}
是否捕获到任何异常? – ViVi
没有例外:) – Dave
数据表从哪里来?如果它是生成的,那很明显,这是行不通的,但如果它是来自数据库的表,这是另一种情况。 –