c#wpf-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 {

我正在使用c#、wpf、DataGrid、SqlDataAdapter、DataTable、MS Sql server 在主窗体上有一个DataGrid和一个按钮。 单击按钮应从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);
        }
}

注意:我不使用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的表,则这是另一种情况。