Obtenir les données spécifiques de la cellule de la ligne sélectionnée dans la grille de données WPF C#
J'ai un DataGrid que je remplis avec les données de ma base de données sql.
Maintenant je veux obtenir une cellule spécifique (2ème cellule) à partir de la ligne que j'ai sélectionné avec une case à cocher.
C'est ce que j'ai maintenant:
WPF XAML:
<DataGrid Name="myGrid">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Checked="CheckBox_Checked"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="CustomerID" Width="Auto" Binding="{Binding CustomerID}"/>
<DataGridTextColumn Header="ItemID" Width="Auto" Binding="{Binding ItemID}"/>
<DataGrid>
De code C#:
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
DataGrid row = (DataGrid)myGrid.SelectedItems[1];
System.Windows.MessageBox.Show(row);
}
J'obtiens une erreur lors de l'exécution:
Système.ArgumentOutOfRangeException
{"Index était hors de portée. Doit être non négatif et inférieur à la taille de la collection.\r\nParameter nom: index"}
Ce que je fais mal? Dois-je utiliser une autre méthode pour obtenir les cellules que je veux?
- Qui de cellules de données que vous voulez? Comme par posté XAML, il contient seulement une cellule avec la case à cocher dans il.
- Je ne peux pas voir toutes les données dans votre grille de données? Comment est-il peuplé?
- J'en ai laissé un peu de code, de la pensée, il n'était pas nécessaire. @GáborBirkás
- Êtes-vous en utilisant le pattern MVVM? Pourquoi ne pas lier votre grille de données de contexte à une ObservableCollection contenant votre base de données en lignes? Je peux vous donner le code pour que, si vous le souhaitez.
- Oui s'il vous plaît @GáborBirkás j'espère pouvoir ensuite le faire fonctionner
Vous devez vous connecter pour publier un commentaire.
J'ai enfin trouvé! Très simple.
Le Pattern MVVM.
Votre XAML:
ViewModel:
App.xaml.cs
Votre DelegateCommand classe:
DatabaseModel.cs:
Lier votre commande dans le code xaml pour l'élément sélectionné. De cette façon, il deviendra le paramètre pour CheckCommand:
J'espère que cela couvre tout. Bien sûr, vous aurez besoin de gestionnaires d'événements pour communiquer avec Application.xaml.cs, mais je ne sais pas ce que vous voulez faire après le traitement de votre cellule. Je ne l'ai fait 3 fois, j'espère que ça fonctionne.
DataGrid
, ne pas apprendre MVVM... ils n'ont même pas ajouter un MVVM balise ou une mention nulle part dans leur question. Notre objectif ici est d'aider à la question des auteurs, pas inutilement les confondre.Utiliser cette 100% de travail.
Si je vous comprends bien, vous voulez obtenir la valeur de la ligne sélectionnée de la propriété qui est liée aux données de la deuxième colonne de votre
DataGrid
. Toutefois, le code que tu nous as montré ne pas faire:Votre erreur a été de vous dire...
... parce que vous avez essayé d'accéder au deuxième élément de la
SelectedItems
collection quand il n'y avait qu'un (ou non) de l'élément sélectionné. Par conséquent, votre indice utilisé (1
) est hors de la plage.Cependant, une fois que vous avez fixé cette erreur, vous auriez immédiatement trouvé un autre vous dire qu'il n'y ait pas de défaut de fonte mis en place entre un
DataGrid
(le type de votrerow
paramètre) et quel que soit le type que vous avez dans leDataGrid
, à nouveau grâce à cette ligne:Cela devrait être...
... parce que le
SelectedItems
propriété renvoie les éléments de la collection qui sont sélectionnés. Une fois que vous avez l'élément de données de la ligne sélectionnée, puis tout ce que vous devez faire est d'accéder à la propriété désirée à partir d'elle... je crois que vous avez été au bout de laItemID
la valeur de la propriété:dans wpf, ceci a travaillé pour moi
Si vous souhaitez utiliser la valeur de la cellule dans une zone de texte, par exemple.