【问题标题】:Delete a specific row in Datagrid C# WPF删除 Datagrid C# WPF 中的特定行
【发布时间】:2018-07-09 17:15:50
【问题描述】:

我正在使用 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 访问和修改元素。

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

【问题讨论】:

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

标签: c# sql wpf datagrid


【解决方案1】:

您需要从DataTable 中删除该行。试试这个:

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

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

【讨论】:

  • 非常感谢
【解决方案2】:

您可以使用IEditableCollectionView 来执行此操作。如果允许进行更改,您可以使用 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);
                }
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2014-12-17
    • 2014-08-22
    • 2019-10-26
    • 2015-01-26
    • 1970-01-01
    • 2012-05-20
    相关资源
    最近更新 更多