web-dev-qa-db-fra.com

ListView éditable

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. 

18
THE DOCTOR

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.

14
Simon Gillbee

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

6
Grammarian

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

1
A. Abiri

DataGridView est votre ami SourceGrid est une alternative

0
Pavels

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

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

0
dcarl661

À partir de là, vous voudrez peut-être utiliser plutôt DataGridView.

DataGridView (MSDN)

0
jblaske