c#wpf - DataGrid删除选定的行

时间:2016-05-31 22:47:13

标签: c# wpf datatable datagrid

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

}

P.S。:我不使用MVVM

非常感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

此代码用于删除选定的行。确保

while (Mydatagrid.SelectedItems.Count >= 1)
{
 DataRowView drv = (DataRowView)Mydatagrid.SelectedItem;
 drv.Row.Delete();
}

答案 1 :(得分:0)

您可以考虑将for循环重构为while循环。例如while(datagrid.SelectedItem.Count> = 1)。通常,在基于索引访问集合时会遇到问题,以防您在循环中删除项目。

调试提示:尝试检查for循环循环中所选项的计数,并检查对象是否存在@特定索引。

答案 2 :(得分:0)

一切都是正确的我想,要从DataTable删除行,请使用以下语法:

datatable.Rows.Remove((myGrid.SelectedItem as DataRowView).Row);

或者在第二个代码块中:

DataRowView rowView = dataGrid.SelectedItems[i] as DataRowView;
        datatable.Rows.Remove(rowView.Row);

然后最后提出

datatable.AcceptChanges();

变化应该反映得恰到好处。

答案 3 :(得分:0)

我很抱歉没有回复并让你久等了! 你的建议给了我很多帮助。 我已经确定了这种情况:

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