WPF DG-如何从DataGrid中删除按钮单击事件上的选定行

WPF DG-如何从DataGrid中删除按钮单击事件上的选定行,wpf,wpfdatagrid,Wpf,Wpfdatagrid,我有以下问题 我用鼠标单击从我的DataGrid中选择一行,如下所示: Admin=AdmindGrid.SelectedItem 如何使用按钮单击事件删除此行?我无法使用Rows.Delete,并且在WPF中找不到任何Delete、remove命令。谢谢你的帮助 这实际上取决于如何将数据绑定到数据网格 因为它看起来像是绑定了一个Admin类型的枚举,所以您应该在列表中找到它并将其删除。然后数据网格应该更新。如果要以双向模式将数据网格绑定到一个可观察的集合,则只需从集合中删除所选项即可; 以下是

我有以下问题

我用鼠标单击从我的DataGrid中选择一行,如下所示: Admin=AdmindGrid.SelectedItem


如何使用按钮单击事件删除此行?我无法使用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();
    }