it-swarm.dev

Bearbeitbare ListView

Ich möchte ein bearbeitbares ListView in einer C # winforms-Anwendung erstellen, in dem ein Benutzer auf eine Zelle doppelklicken kann, um deren Inhalt zu ändern. Es wäre toll, wenn mir jemand eine Anleitung und/oder ein Beispiel geben könnte. Ich suche keine kommerziellen Produkte. 

18
THE DOCTOR

Du stellst die falsche Frage :)

Eine ListView ist nicht das richtige Steuerelement. Verwenden Sie das Steuerelement DataGridView . Es kann so konfiguriert werden, dass es wie eine ListView aussieht, unterstützt jedoch das direkte Bearbeiten von Zellen.

14
Simon Gillbee

Eine ObjectListView macht genau das und vieles mehr. Es ist ein Wrapper um eine normale .NET ListView. Es ist Open Source. 

Die Website enthält ein Erste Schritte , das Ihnen den Einstieg erleichtern soll, sowie eine ganze Seite, die der Bearbeitung von Zellen gewidmet ist

6
Grammarian

Sie können das DoubleClick-Ereignis der Listview verwenden. Wenn es aufgerufen wird, öffnen Sie ein neues Formular, in das der Benutzer einen neuen Wert für das ausgewählte Element eingeben würde. Wenn der Benutzer dann auf OK geklickt hat, ändern Sie den Wert des bestimmten Elements mit dem, was der Benutzer eingegeben hat.

1
A. Abiri

DataGridView ist Ihr Freund SourceGrid ist eine Alternative

0
Pavels

Sie können ein DataTemplate verwenden, um anzugeben, dass die Spalte ein Textfeld (falls bearbeitet) oder einen Textblock (falls nicht bearbeitbar) enthält. Binden Sie dann das Textfeld an die Klasseneigenschaft Ihrer Quellobjektsammlung, die an die itemsource Ihrer Listenansicht gebunden ist.

<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

Ja, verwenden Sie eine DataGridView. 

Sie können nicht nur eine Zelle bearbeiten, sondern auch, wenn Sie eine generische Liste deklarieren, wobei T die Klasse ist, die Sie im Raster anzeigen möchten. Sie können DataSource = diese Liste festlegen. Wenn Sie die Rasteransicht bearbeiten, bearbeiten Sie die Liste tatsächlich automatisch!

0
dcarl661

Nach den Geräuschen sollten Sie stattdessen DataGridView verwenden.

DataGridView (MSDN)

0
jblaske