Frage

Ich habe mir viele Orte angesehen und es fällt mir schwer, diese vermeintlich einfache Sache umzusetzen.Ich habe ein Windows-Formular, in dem ich eine einfache DataGridView in diesem Formular anzeigen muss:

| (CheckBoxColumn) | Filepath | FileState |

Nun gibt es ein paar Probleme.Die Daten, die ich an sie binden muss, befinden sich in einer Liste von Objekten wie dieser:

    class FileObject
    {
        string filePath;
        string fileState;
    }

    //Now here's the list of these objects which I populate somehow. 
    List<FileObject> listFiles;
  • Gibt es eine effiziente Möglichkeit, dies direkt an die DataGridView zu binden, damit verschiedene Objektelemente in der Liste an verschiedene Spalten gebunden sind, und für jedes Kontrollkästchen?
  • Ich habe die Beispiele für das Hinzufügen von Kontrollkästchen -Spalte zu einem DataGrid gesehen, aber keiner von ihnen zeigte, wie man sie auch in die Zeile "Header" hinzufügt, damit sie sich als "All"/"All -deaktivieren" -Buddel verhalten kann.

Jede Hilfe dabei, dies zu erreichen, wäre großartig!Ich schreibe zwar einfache Anwendungen in C#, musste aber nie mit Datagrids usw. arbeiten.:(

Danke!

War es hilfreich?

Lösung

Das DataGridView-Steuerelement verfügt über eine Funktion zum automatischen Generieren von Spalten, die über die AutoGenerateColumns-Eigenschaft festgelegt werden können.Diese Eigenschaft ist standardmäßig auf „true“ eingestellt, d. h. Spalten werden standardmäßig automatisch generiert.

Spalten werden jedoch nur automatisch für öffentliche Eigenschaften des Objekts generiert, das Sie an das Raster binden – Felder werden nicht angezeigt.

Die automatische Generierung funktioniert auch für Kontrollkästchenspalten, wenn für das gebundene Objekt eine öffentliche boolesche Eigenschaft vorhanden ist.

Der einfachste Weg, Ihre ersten beiden Anforderungen zu erfüllen, besteht also darin, Ihre Anforderungen zu ändern FileObject Klasse dazu:

public class FileObject
{
    public string FilePath { get; set; }
    public string FileState { get; set; }
    public bool Selected { get; set; }
}

Wenn Sie diese Klasse nicht ändern können, wäre es am besten, ein Wrapper-Objekt zu erstellen, das ein Dateiobjekt enthält:

public class FileObjectWrapper
{
    private FileObject fileObject_;

    FileObjectWrapper()
    {
        fileObject_ = new FileObject();
    }

    FileObjectWrapper(FileObject fo)
    {
        fileObject_ = fo;
    }

    public string FilePath
    {
        get { return fileObject_.filePath; }
        set { fileObject_.filePath = value; }
    }

    public string FileState
    {
        get { return fileObject_.fileState; }
        set { fileObject_.fileState= value; }
    }

    public bool Selected { get; set; }
}

Anschließend können Sie Ihre Liste zum Binden erstellen (normalerweise ist eine BindingList am besten), indem Sie Folgendes tun:

var fowList = new BindingList<FileObjectWrapper>();

foreach (FileObject fo in // here you have your list of file objects! )
{
    fowList.Add(new FileObjectWrapper(fo));
}

dataGridView1.DataSource = fowList;    

Es gibt viele Möglichkeiten, dies zu tun, aber das ist eine allgemeine Idee.


Sie können auch eine ungebundene hinzufügen DataGridViewCheckBoxColumn zum Raster, obwohl ich es einfacher finde, es in der gebundenen Liste zu haben.So gehen Sie bei Bedarf vor:

DataGridViewCheckBoxColumn c = new DataGridViewCheckBoxColumn();
c.Name = "Selected";
dataGridView1.Columns.Add(c);

Um schließlich die Option „SelectedAll“ in der Kopfzeile zu haben, müssen Sie benutzerdefinierten Code verwenden.

Der Artikel auf CodeProject, auf den Umesh verlinkt hat (CheckBox-Headerspalte für DataGridView) scheint recht einfach zu implementieren zu sein – sie erstellen eine benutzerdefinierte DataGridViewHeaderCell Überschreiben der Paint Und OnMouseClick Methoden.

Andere Tipps

Bitte beachten Sie das untenstehende Beispiel, zeigen Sie genau das, was Sie suchen, nachdem Sie suchen

http://www.codeproject.com/artikel/20165 / Checkbox-Header-Spalte-for-datagridView

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top