WPF – Löschen von DataGrid Selected Items (mit Joined Tables Source) ohne Bindung mit CheckBox

Unter Bezugnahme auf meine vorherige Frage: DataGrid ItemsSource aus verbundenen Tabellen in SQL-database mit LINQ

Ich schaffe diese data Raster:

<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> 

aber jetzt muss ich UserIDs aus ausgewählten Elementen sammeln, um diese Abfrage zu machen und sie aus der database zu löschen:

 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(); } } 

Ich habe die CourseID, aber ich weiß nicht, wie man die UserIDs bekommt! meine Idee ist, eine Checkbox-Spalte hinzuzufügen und überprüfte Artikel zu erhalten UserID aber ich weiß nicht wie. Ich suchte aber mögliche Lösung wie diese hat nicht für mich gearbeitet: So löschen Sie ausgewählte Zeilen (mit Checkbox) in wpf datagrid

Holen Sie sich data der spezifischen Zelle aus der ausgewählten Zeile in DataGrid WPF C #

denn ich möchte kein anderes Feld wie "IsSelected" zur Tabelle hinzufügen.

Danke vielmals:)

Ich glaube, dass Ihr Problem ist, dass Sie Ihre Code-classn auf Ihren databasetabellen zu eng modelliert haben. Wenn eine databasetabelle einen Fremdschlüssel hat, dann sollte Ihre class ein object haben, das sie vom Fremdschlüssel angegeben haben.

Zum Beispiel, wenn dies Ihre database wäre:

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

Ihre classn sollten so aussehen:

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

Also, wenn du die Id des Course wissen wolltest, dass ein User im Code ist, kannst du das einfach überprüfen: User.Course.Id .

Natürlich sollte das nicht eine direkte Korrelation zu deinem Code haben, aber du solltest in der Lage sein, genug von einer Idee zu bekommen, um dir zu helfen.

Ich sammle die UserIDs von DataGrid mit dieser Methode,

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

Sie können alles finden, was Sie von datagrid mit diesen Token benötigen.

Ich weiß, es ist total Hardcoding, aber nachdem ich mehrere erfolglose pathe versucht habe, kam es mir in den Sinn und arbeitete.

Eine andere Methode:

  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(); }