DataGridView oder ListView was ist besser? (VS C#)

TresPuntos

Cadet 4th Year
Registriert
Juni 2018
Beiträge
113
Hallo,

vorab meine Anforderung ich brauche ein Grid mit 4 Spalten -> Spalte 1 der Name, Spalte 2 Status anzeigen mit 3 verschiedenen Farben, Spalte 3 eine Checkbox, Spalte 4 ein Button mit einer Funktion.

Ich nutze aktuell das DataGridView, aber habe gerade ein paar Probleme bei denen ich Hilfe bräuchte.
Folgende Zeile nutze ich aktuell:
dgvDateien.Rows.Add(dateiName, @"C:\Test\grün.png", clVergleich. , ButtonMethode);

Die erste Spalte wird eingetragen, aber da Bild lässt sich allerdings nicht einfügen, obowhl es als DataGridViewImageColumn markiert wurde. Zusätzlich würde ich gerne wissen, wie ich die Checkbox clVergleich als gechecked oder ungechecked einstellen kann.


Wäre das ganze eventuell mit ListView leichter zu lösen?


Vorab danke für die Hilfe
 
Nein, das Grid ist schon das richtige Control für dich. Ich gebe dir aber recht, dass das DataGridView unter Windows Forms einigen limitierungen unterliegt. Mein Tipp: Verwende WPF anstelle von Windows Forms. Das DataGrid in WPF ist DEUTLICH leistungsfähiger.

greetz
hroessler
 
Bei WPF hatte ich das Problem, dass in eine Groupbox nicht verschiedene Steuerelemente eingefügt werden können oder habe ich mich da nur dumm angestellt?
 
Eigentlich muss die Groupbox nur ein Control enthalten. Wie dieses Control aussieht ist aber auch total dir überlassen. Denn das Control, was du da reinpackst, kann natürlich auch wieder aus Subcontrols bestehen :) Hab zwar noch nicht aktiv damit gearbeitet aber das ist eigentlich das von mir gewohnte Verhalten und lässt sich hier auch ganz gut nachverfolgen.
 
Danke:)

Wie fügt man die einzelnen Items bei WPF hinzu und dort habe ich auch kein Button zum Hinzufügen gesehen?
 
Was meinst du jetzt genau? Die Items ins Datagrid oder wie? Idealerweise wäre Vlt etwas Pseudocode oder ne Kurzzusammenfassung was du eigentlich erreichen willst, dann kann man auch spezifischer drauf eingehen. Welche Control wo rein, wie angeordnet, was soll dargestellt werden.
 
Also ich brauche ein Datagrid mit 4 Spalten.

Spalte 1 enthält den Namen der Datei -> Textzelle
Spalte 2 enthält den Status (rot, gelb und grün) -> würde da mit Images lösen
Spalte 3 enthält eine Checkbox, falls diese gechecked ist soll später etwas passieren
Spalte 4 enthält einen Button der etwas ausführen soll

Ich habe einen Code zusammengestellt und falls in eine Schleife reingegangen wird soll die Variable dateiName in Spalte eins eingefügt werden. In dieselbe Zeile in Spalte 2 das jeweilige Bild. in Spalte 3 soll sie je nach If/else eingang gechecked oder nicht werden und letztlich der Button (der Button soll für jede Zeile die gleiche Funktion haben). Dort soll aber der Dateiname aus Spalte 1 jeweils mitgegeben werden.
Ich hoffe dass es für die verständlich war, bin kein großer Programmierer und weiß deshalb nicht wie ich das ganze lösen soll. Im Internet werden zu diesen Themen immer Datenbanken mit eingefügt, aber durch meine Andwendung muss ich es manuell per code einfügen, weshalb ich dazu nichts finde.


Mir ist es egal ob es durch WPF oder WinForms gelöst wird, es soll letztlich einfach funktionieren.
 
Ich mach sowas gerne anhand des MVVM Ansatzes. Also mit Hauptbestandteilen View (Anzeige) und ViewModel (quasi die Datenebene für die View). Dann wäre es sowas wie <DataGrid ItemsSource="{Binding Customers}" />, die je nach Datentyp sogar schon automatisch den Zellentyp generiert. Ich verweise hier mal auf nen guten Anfang der Möglichkeiten.
In deinem Fall wäre das Beispiel hier wohl ein guter Anfang:
XML:
<DataGrid ItemsSource="{Binding Customers}" AutoGenerateColumns="False" >
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Image" Width="SizeToCells" IsReadOnly="True">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Image Source="{Binding Image}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>
Da könntest du dir das dann schrittweise als Template in der View zusammenbauen, sodass du dann nur noch die entsprechende ItemsSource als Liste deiner Elemente im ViewModel an das DataGrid binden musst und der Rest passiert dann automatisch durch das Grid. Also View.xaml -> DataGrid, Binding definieren und Templates integrieren wie es angezeigt werden soll, ViewModel.cs -> Properties und Datenverarbeitung, etc. was die Daten für die Bindings in der View bereitstellt.
Hier könnte deine Liste also ungefähr so aussehen: List<MyGridItem> MyItems, MyGridItem mit den Properties string FileName, ??? Status/Image, bool IsChecked, ICommand ExecutionCommand.
Im Template dann für die erste Spalte eine Textbox mit Binding auf FileName, den Status (in welcher Form auch immer) als Image mit Binding auf Status/Image (wie das hier am besten wäre weiß ich gerade nicht) in die zweite, die dritte mit der Checkbox und Checkbox.IsChecked auf IsChecked-Property binden und die letzte Spalte als Button mit Command-Binding auf ExecutionCommand.

Ich hocke gerade selber auf Arbeit, daher kann ich gerade auch nicht zu sehr ins Detail gehen. Aber vlt hilft dir das als Ansatz schonmal. Man kann das sicher auch zu großen Teilen in Code packen, finde ich persönlich aber nicht so pralle. Definiere sowas lieber in der GUI und hab dann den strikte Trennung zwischen Datenhaltung und Ansicht.
Vielleicht weiß ein anderer hier auch noch ein paar Kniffe, die vlt. schneller zum Ziel führen als meine Methode :D
 
Also ich hab es jetzt doch mit dem DataGridView von der WinForms gelöst, aber trotzdem an alle die mir geholfen haben :)
 
Zurück
Oben