[英]Delete a specific row in Datagrid C# WPF
我正在用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访问和修改元素。
我不知道问题出在哪里,因为我是编程新手。 谢谢大家
您需要从DataTable
删除该行。 尝试这个:
DataRowView drv = dtg.SelectedItem as DataRowView;
if(drv != null)
{
DataView dataView = dtg.ItemsSource as DataView;
dataView.Table.Rows.Remove(drv.Row);
}
设置ItemsSource
属性后,您将无法从Items
集合中删除项目。
您可以使用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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.