c#wpf-DataGrid删除选定行
我正在使用c#、wpf、DataGrid、SqlDataAdapter、DataTable、MS Sql server 在主窗体上有一个DataGrid和一个按钮。 单击按钮应从DataGrid选定行中删除。然后从数据库中。但这并没有发生!只有来自数据网格! 这是我的密码:c#wpf-DataGrid删除选定行,c#,wpf,datatable,datagrid,C#,Wpf,Datatable,Datagrid,我正在使用c#、wpf、DataGrid、SqlDataAdapter、DataTable、MS Sql server 在主窗体上有一个DataGrid和一个按钮。 单击按钮应从DataGrid选定行中删除。然后从数据库中。但这并没有发生!只有来自数据网格! 这是我的密码: private void Button_DeleteSelectedRows_Click(object sender, RoutedEventArgs e) { try {
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);
}
}
注意:我不使用MVVM
非常感谢你的帮助 > P>您可以考虑将for循环重构为while循环。例如,(DATAGIDID.StRead It.Calue>=1)。通常,在基于索引访问集合时会遇到问题,例如在循环中删除项
调试提示:尝试检查for循环中所选项目的计数,并检查对象是否存在于特定索引中 我想一切都是对的,要从
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();
}
是否捕获到任何异常?数据表来自何处?如果它是生成的,那么很明显这将不起作用,但是如果它是来自database direct的表,则这是另一种情况。