WPF DG-如何从DataGrid中删除按钮单击事件上的选定行
我有以下问题 我用鼠标单击从我的DataGrid中选择一行,如下所示: Admin=AdmindGrid.SelectedItemWPF DG-如何从DataGrid中删除按钮单击事件上的选定行,wpf,wpfdatagrid,Wpf,Wpfdatagrid,我有以下问题 我用鼠标单击从我的DataGrid中选择一行,如下所示: Admin=AdmindGrid.SelectedItem 如何使用按钮单击事件删除此行?我无法使用Rows.Delete,并且在WPF中找不到任何Delete、remove命令。谢谢你的帮助 这实际上取决于如何将数据绑定到数据网格 因为它看起来像是绑定了一个Admin类型的枚举,所以您应该在列表中找到它并将其删除。然后数据网格应该更新。如果要以双向模式将数据网格绑定到一个可观察的集合,则只需从集合中删除所选项即可; 以下是
如何使用按钮单击事件删除此行?我无法使用Rows.Delete,并且在WPF中找不到任何Delete、remove命令。谢谢你的帮助 这实际上取决于如何将数据绑定到数据网格
因为它看起来像是绑定了一个Admin类型的枚举,所以您应该在列表中找到它并将其删除。然后数据网格应该更新。如果要以双向模式将数据网格绑定到一个可观察的集合,则只需从集合中删除所选项即可; 以下是如何继续双击以删除的示例:
<Grid>
<DataGrid ItemsSource="{Binding AdminCollection,Mode=TwoWay}" SelectedItem="{Binding SelectedAdmin}" MouseDoubleClick="DeleteRowEvent" >
</DataGrid>
</Grid>
如果您手动创建datagrid并使用linq,那么您可以尝试使用它 就像这样:-
<Window x:Class="Wpf_grid.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="326" Width="946">
<Grid>
<DataGrid Name="MyDataGrid" Uid="MyDataGrid" AutoGenerateColumns="False" AlternationCount="2" SelectionMode="Single" Margin="0,31,0,0" IsReadOnly="False" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=RegId}" IsReadOnly="False" Header="Registration Id" Width="sizeToHeader"/>
<DataGridTextColumn Binding="{Binding Path=Name}" IsReadOnly="False" Header="Name" Width="sizeToHeader" />
<--Many column here-->
<DataGridTemplateColumn Header="Edit Row">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Edit" Click="btnEdit_Click"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Delete Row">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Delete" Click="btnDelete_Click"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
谢谢你的回答!约瑟夫,我试过你的密码,我没有把任何数据输入我的DG。我知道问题是什么,但我不知道如何解决它。因此,您在AdminCollection=newobservetecollection{newadmin{…}下设置了新值;我理解你的代码,但我不知道该如何替换。。。参与其中,因为我之前已经使用LINQ通过SQLQuery为所有字段赋值。那么,如果您已经为所有字段赋予了值,那么您在新管理员下会做什么呢?已尝试的AdminCollection=新的ObservableCollection;另外,只需使用从linq查询返回的列表实例化可观察集合:AdminCollection=new ObservableCollectionlinq query.toListOk我按照您所说的做了,现在这部分已经好了。但是我没有得到任何数据,所以我使用了一些断点。AdminCollection是问题所在,当程序运行selectedadmin时,当我用光标移动它时,它会显示count=0。它知道表中有多少行,当我使用断点运行它时,我的其余代码会返回数据源。其余的人找到桌子。如果我能让它工作,我会接受你的答案作为解决方案如果你有任何想法,请与我分享。我真的很感谢你的帮助约瑟夫!我无法帮助,除非我看到代码,发布新问题并指向它!不客气,谢谢,它可以工作,但是它只删除DataGrid行,但是数据仍然在我的数据库中。谢谢你,你帮了我很多忙
DataContext="{Binding RelativeSource={RelativeSource Self}}"
<Window x:Class="Wpf_grid.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="326" Width="946">
<Grid>
<DataGrid Name="MyDataGrid" Uid="MyDataGrid" AutoGenerateColumns="False" AlternationCount="2" SelectionMode="Single" Margin="0,31,0,0" IsReadOnly="False" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=RegId}" IsReadOnly="False" Header="Registration Id" Width="sizeToHeader"/>
<DataGridTextColumn Binding="{Binding Path=Name}" IsReadOnly="False" Header="Name" Width="sizeToHeader" />
<--Many column here-->
<DataGridTemplateColumn Header="Edit Row">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Edit" Click="btnEdit_Click"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Delete Row">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Delete" Click="btnDelete_Click"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
private void btnDelete_Click(object sender, RoutedEventArgs e)
{
gridDataContext gcdd = new gridDataContext();
registration RegistrationRow = MyDataGrid.SelectedItem as registration;
var Registration = (from p in gcdd.registrations where p.RegId == RegistrationRow.RegId select p).Single();
gcdd.registrations.DeleteOnSubmit(Registration);
gcdd.SubmitChanges();
MessageBox.Show("Row Deleted Successfully");
LoadCustomerDetail();
}