WPF - 使用CheckBox删除没有绑定的DataGrid所选项(带有连接表源)

时间:2014-09-01 11:09:56

标签: c# sql-server wpf linq xaml

参考我之前的问题:DataGrid itemsSource from Joined Tables in SQL Database using LINQ

我创建了这个数据网格:

<DataGrid x:Name="DataGridRegisteredUsers" IsReadOnly="True" AutoGenerateColumns="False"
            HorizontalContentAlignment="Stretch" Margin="0,0,-1,-1"
            FlowDirection="RightToLeft" Opacity="0.9" FontFamily="B Nazanin" FontSize="15" RowDetailsVisibilityMode="Visible">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Path=UserID}" IsReadOnly="True"
                            Header="UserID" />
        <DataGridTextColumn Binding="{Binding Path=FirstName}"
                            Header="First Name" />
        <DataGridTextColumn Binding="{Binding Path=LastName}"
                            Header="Last Name" />
        <DataGridTextColumn Binding="{Binding Path=EmploymentID}"
                            Header="Employment ID" />
        <DataGridTextColumn Binding="{Binding Path=Status}"
                            Header="Status" />                                                  
    </DataGrid.Columns>
</DataGrid>

但现在我需要从Selected Items收集UserID来执行此查询并从数据库中删除它们:

foreach (var userID in DataGridSelectedUserIDs)
{
    var findQ = (from f in dbEntities.RelCUs
        where f.UserID == userID && f.CourseID == currCourse.CourseID
        select f);
    foreach (var relCu in findQ)
    {
        dbEntities.RelCUs.Remove(relCu);
        dbEntities.SaveChanges();
    }
}

我有CourseID,但我不知道如何获取UserID! 我的想法是添加一个复选框列并获取选中的项目UserID,但我不知道如何。 我搜索过,但可能的解决方案就像这些并没有为我工作: How to delete selected rows (using checkbox) in wpf datagrid

Get data of specific cell from selected row in DataGrid WPF C#

因为我不想添加其他字段,例如&#34; IsSelected&#34;到桌子。

非常感谢:)。

3 个答案:

答案 0 :(得分:1)

我相信您的问题是您已经过密集地在数据库表上建模了代码类。如果数据库表中包含外键,那么您的类应该具有由外键指定的类型的对象。

例如,如果这是您的数据库:

User              Course
------            ------
Id                Id
Name              Name
CourseId

您的课程应如下所示:

User              Course
------            ------
Id                Id
Name              Name
Course

因此,如果您想知道代码中Id所在的Course的{​​{1}},您可以检查一下:User

当然,这不应该与您的代码直接相关,但您应该能够从中获得足够的想法来帮助您。

答案 1 :(得分:0)

我使用此方法从DataGrid收集UserID,

string Input = id.Item.ToString();
            string[] OutPut = Input.Split(new[] {',', '=', '}', '{'}, StringSplitOptions.RemoveEmptyEntries);
            foreach (var s in OutPut)
            {
                MessageBox.Show(s);
            }

您可以使用这些令牌从datagrid中找到所需的任何内容。

我知道它完全是HardCoding,但在尝试了几种不成功的方法之后,我想到了它并且工作了。

答案 2 :(得分:0)

另一种方法:

            List<int> IDs = (from id in DataGridRegisteredUsers.SelectedCells
            select id.Item.ToString()
            into Input
            select Input.Split(new[] {',', '=', '}', '{'}, StringSplitOptions.RemoveEmptyEntries)
            into OutPut
            select Convert.ToInt32(OutPut[1])).ToList();

        foreach (int userID in IDs)
        {
            dbEntities = new BASUEntities();
            RelCU findQ = (from f in dbEntities.RelCUs
                where f.UserID == userID && f.CourseID == currCourse.CourseID
                select f).SingleOrDefault();
            dbEntities.RelCUs.Remove(findQ);
            dbEntities.SaveChanges();
        }