参考我之前的问题: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;到桌子。
非常感谢:)。
答案 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();
}