Je cherche à créer un ListView modifiable dans une application Winforms C # où un utilisateur peut double-cliquer sur une cellule afin de changer son contenu. Ce serait formidable si quelqu'un pouvait me donner des conseils et/ou un exemple. Je ne cherche pas à utiliser des produits commerciaux.
Vous posez la mauvaise question :)
Un ListView n'est pas le bon contrôle. Utilisez le DataGridView control. Il peut être configuré pour ressembler à un ListView, mais il prend en charge la modification de cellules sur place.
Un ObjectListView fera exactement cela et bien plus encore. C'est un wrapper autour d'une liste .NET normale. C'est open source.
Son site Web contient un Mise en route pour vous aider à démarrer, ainsi qu'une page entière consacrée à l'édition de cellules
Vous pouvez utiliser l'événement DoubleClick de la liste et, lorsqu'il est appelé, ouvrir un nouveau formulaire dans lequel l'utilisateur entre une nouvelle valeur pour l'élément sélectionné. Ensuite, lorsque l'utilisateur a appuyé sur ok, vous pouvez modifier la valeur de l'élément spécifique en fonction de ce que l'utilisateur a entré.
DataGridView est votre ami SourceGrid est une alternative
Vous pouvez utiliser un DataTemplate pour spécifier que la colonne contient une zone de texte (si éditable) ou un bloc de texte (si non éditable), puis liez-la à la propriété de classe de votre collection d'objets source liée à la source d'objets de votre liste.
<Window.Resources>
<ResourceDictionary>
<DataTemplate x:Key="NameHeader">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Name" VerticalAlignment="Center" Margin="10,0,0,0" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="NameCell">
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding Path=Name}" VerticalAlignment="Center" Margin="10,0,0,0" />
</StackPanel>
</DataTemplate>
</ResourceDictionary>
</Window.Resources>
<Grid>
<ListView x:Name="lvwList" Height="200" VerticalAlignment="Top" ItemsSource="{Binding Path=SourceObjectCollection}">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" HeaderTemplate="{StaticResource NameHeader}" CellTemplate="{StaticResource NameCell}" Width="140" />
</GridView>
</ListView.View>
</ListView>
</Grid>
Nick Hanshaw
Oui, utilisez un DataGridView.
Non seulement vous pouvez éditer une cellule, mais si vous déclarez une liste générique où T est la classe que vous souhaitez afficher dans la grille, vous pouvez définir le DataSource = cette liste et lorsque vous éditez la vue grille, vous éditez réellement la liste automatiquement!
À partir de là, vous voudrez peut-être utiliser plutôt DataGridView.