Bouton ajouter à la liste de façon dynamique dans chaque ligne à l'aide de C#
J'ai un ListView
dans lequel je dois afficher toutes les lignes extraites de ma table de base de données. De nouveau, je dois donner deux boutons modifier et supprimer dans chaque ligne. Comme je suis débutant pour la même chose, j'ai essayé le code suivant dans le code XAML-
<ListView Height="352" HorizontalAlignment="Left" Margin="20,90,0,0" Name="Tab1lstProductCategories" VerticalAlignment="Top" Width="1008">
<ListView.View>
<GridView>
<GridViewColumn Header="Category Name" DisplayMemberBinding="{Binding Col1}" Width="200"/>
<GridViewColumn Header="Created Date" DisplayMemberBinding="{Binding Col2}" Width="200"/>
<GridViewColumn Header="Last Updated" DisplayMemberBinding="{Binding Col3}" Width="200"/>
<GridViewColumn Header="Edit" Width="200">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Button Content="Edit" Click="EditCategory" CommandParameter="{Binding Id}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Delete" Width="200">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Button Content="Delete" Click="DeleteCategory"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
Et en C#, j'ai Écrit-
DataTable dt=db.Select("select * from ProductCategories");
for (int i = 0; i < dt.Rows.Count; i++)
{
//Button edit, delete;
//edit = new Button();
//edit.Content="Edit";
//edit.Click += EditCategory;
//delete= new Button();
//delete.Content="Delete";
//delete.Click += DeleteCategory;
//edit.CommandParameter = dt.Rows[i]["Id"];
//delete.CommandParameter = dt.Rows[i]["Id"];
Tab1lstProductCategories.Items.Add(new { Col1 = dt.Rows[i]["CategoryName"], Col2 = dt.Rows[i]["CreatedDate"], Col3=dt.Rows[i]["LastUpdated"]});
}
private void EditCategory(object sender, RoutedEventArgs e)
{
Button b=sender as Button;
MessageBox.Show(b.CommandParameter.ToString());
}
private void DeleteCategory(object sender, RoutedEventArgs e)
{
}
J'ai obtenu le résultat que-
Je veux bouton au dessus, s'il vous plait, aidez-moi.
- De ne pas créer ou manipuler des éléments d'INTERFACE utilisateur dans le code de procédure en WPF. C'est ce que XAML est pour. Vous êtes à la recherche d'un
CellTemplate
. - Les liaisons utilisera automatiquement
ToString()
méthode pour afficher un contenu lorsqu'il n'est pas donné une certaineDataTemplate
. Utiliser unCellTemplate
pour cela. - Les gens devraient arrêter de liaison de l'INTERFACE utilisateur directement à la base de données ...
- OMG Pourquoi dans le monde vous liant à un type anonyme?? La création d'un modèle de données à la place, ou l'utilisation d'un ORM.
InformationsquelleAutor Prateek Shukla | 2013-10-14
Vous devez vous connecter pour publier un commentaire.
Ok, donc, je vois quelques problèmes avec votre code.
1) Vous devriez vraiment créer un type de données comme @HighCore suggéré. En regardant ton code je suppose que ça va ressembler à quelque chose comme ceci:
Puis créer une collection de
ProductCategory
au lieu d'ajouter directement des types anonymes2), Vous êtes directement l'ajout de l'élément au
ListView
qui est faux. Ce que vous devez faire est de configurer votre collection à laItemsSource
de votreListView
.3) Après l'utilisation de
CellTemplate
pour atteindre lesListView
voulais regarder à travers xaml et la modification de laDisplayMemberBinding
de liaison pour les propriétés appropriées, vous pouvez lier leCommandParameter
par le défaut{Binding}
expression qui va définir le paramètre de la commande à laProductCategory
élément qu'elle représente.De l'gestionnaires d'événements -
EditCategory
etDeleteCategory
, vous pouvez extraire l'Id de laProductCategory
Cela devrait être suffisant pour rendre votre code de travail, mais il ya plusieurs autres points que je voudrais faire
un. Vous devrait fortement envisager d'utiliser MVVM modèle. cela signifie pas à l'aide de gestionnaires d'événements dans le code derrière, mais à l'aide de Les commandes au lieu de cela, et d'utiliser
CommandParameter
la façon dont il était à l'origine destiné à être utilisé.b. Considérons quelques ORM cadre au lieu de lier la base de données directement à votre INTERFACE utilisateur. cela créer incroyablement serré de couplage qui permet de rendre votre code beaucoup moins réutilisable, et flexible.
Espère que cette aide