删除Datagrid C#WPF中的特定行

删除Datagrid C#WPF中的特定行,c#,sql,wpf,datagrid,C#,Sql,Wpf,Datagrid,我正在用c编写一个简单的应用程序# 我不想做的是,当我将数据从SQL数据库检索到Datagrid中时,我希望通过选择一些行,然后单击按钮来删除它们 我用于检索数据的代码如下所示: SqlConnection conn = new SqlConnection("Server=MEO-PC;Database= autoser; Integrated Security = true"); conn.Open(); SqlCommand cmd = new

我正在用c编写一个简单的应用程序# 我不想做的是,当我将数据从SQL数据库检索到Datagrid中时,我希望通过选择一些行,然后单击按钮来删除它们

我用于检索数据的代码如下所示:

     SqlConnection conn = new SqlConnection("Server=MEO-PC;Database= autoser; Integrated Security = true");

        conn.Open();

        SqlCommand cmd = new SqlCommand("SELECT * From evidenc", conn);
        DataTable dt = new DataTable("dtList");
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(dt);
        dtg.ItemsSource = dt.DefaultView;
        SqlDataAdapter adapt = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        adapt.Fill(ds);

        conn.Close();
另外,我尝试删除特定行的代码是:

     if (dtg.SelectedIndex >= 0)
        {
            dtg.Items.RemoveAt(dtg.SelectedIndex);
        }
我得到的错误是:在使用ItemsSource时,操作无效。改为使用ItemsControl.ItemsSource访问和修改元素

我不知道问题出在哪里,因为我是编程新手。多亏了大家

你才可以这样做。如果基础集合允许进行更改,则可以使用IEditableCollectionView公开的方法和属性直接更改基础集合,而不管集合的类型如何

IEditableCollectionView iecv = CollectionViewSource.GetDefaultView(theDataGrid.ItemsSource) as IEditableCollectionView;

 while (theDataGrid.SelectedIndex >= 0)
            {
                int selectedIndex = theDataGrid.SelectedIndex;
                DataGridRow dgr = theDataGrid.ItemContainerGenerator.ContainerFromIndex(selectedIndex) as DataGridRow;
                dgr.IsSelected = false;

                if (iecv.IsEditingItem)
                {
                    // Deleting during an edit!
                    iecv.CommitEdit();
                    iecv.RemoveAt(selectedIndex);
                }
                else
                {
                    iecv.RemoveAt(selectedIndex);
                }
            }

您需要从
数据表中删除该行。试试这个:

DataRowView drv = dtg.SelectedItem as DataRowView;
if(drv != null)
{
    DataView dataView = dtg.ItemsSource as DataView;
    dataView.Table.Rows.Remove(drv.Row);
}

设置了
ItemsSource
属性后,无法从
Items
集合中删除项目。

您正在从数据表加载DG。表中的行号与DG中的行号相同。因此,从数据表中删除该项。然后使用以下命令刷新DG:dtg.ItemSource=null;dtg.ItemSource=dt.DefaultView;非常感谢你