none
Datagridview CheckBox-Darstellung RRS feed

  • Frage

  • Hallo Experten

    mit folgenden Code versuche ich DB-Abfrage (Access) in einem Datagrid abzubilden, das klappt auch ganz gut, wenn man von Spalte "CheckPik" absieht. Diese Spalte hätte ich gerne als Checkbox.

                PIKdataAdapter = New OleDb.OleDbDataAdapter("Select cbool(0) as CheckPik, * from ...", My.Settings.DefaultConnectionString)
                PIKdataAdapter.Fill(PIKTable)
                Me.PIKBindingSource.DataSource = PIKTable
    
                DataGridView1.DataSource = PIKBindingSource
    
                DataGridView1.Columns.Item("CheckPik").Visible = True
                DataGridView1.Columns.Item("CheckPik").HeaderText = ""
                DataGridView1.Columns.Item("CheckPik").Width = 40
    
                'Die folgende Zeil wird mit Fehler ausgeführt
                'DataGridView1.Columns.Item("CheckPik").CellTemplate = New DataGridViewCheckBoxCell()
    Für Idee wäre ich dankbar ... mfg eem monarch
    Mittwoch, 19. Dezember 2012 17:14

Antworten

Alle Antworten

  • Hallo,
    einfach der Datagridview.columns Auflistung eine DatagridViewCheckboxColumn hinzufügen.
    Schaue mal hier:
    http://csharp.net-informations.com/datagridview/csharp-datagridview-checkbox.htm
    oder hier: http://www.gssg.de/net_dgriddmo.htm

    Grüße Alexander

    • Als Antwort markiert Monarch-Falter Donnerstag, 20. Dezember 2012 11:53
    Donnerstag, 20. Dezember 2012 08:14
  • Servus Alexander,

    wie man eine UNGEBUNDENE Spalte zur Laufzeit hinzufügt, ist mir klar ...

                If PikCheck = True Then
                    Dim column As New DataGridViewCheckBoxColumn()
                    With column
                        .HeaderText = ""
                        .Name = "CheckPik"
                        .AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
                        .FlatStyle = FlatStyle.Standard
                        .CellTemplate = New DataGridViewCheckBoxCell()
                        .CellTemplate.Style.BackColor = Color.Beige
                    End With
                    DataGridView1.Columns.Insert(0, column)
                End If

    Das ist aber nicht mein Problem, sonder das es sich um gebunde Spalten handelt. Der SQL-Strting laute "Select cbool(0) as PikCheck ....". Das Datagrid zeigt die Spalte "PikCheck" an, aber eben nicht als Checkbutton. A) Warum zeigt sie eine Booleanspalte nicht als Checkbox an? B) Wie kann ich das DGV dazu bringen es zu tun?

    mfg eem monarch

    Donnerstag, 20. Dezember 2012 08:46
  • Wenn die Spalte “bool” ist, dann wird automatisch auch eine CheckBoxColumn erzeugt. Deine Spalte ist vermutlich in der gebundenen Datenquelle nicht vom Typ “bool”. Erzeuge eine booleasche Eigenschaft für die Bindung, die den aus der Datenbank gelesenen Typ mappt.
     
    --
    Viele Gruesse
    Peter
    Donnerstag, 20. Dezember 2012 10:02
  • Servus Peter,

    ähm ich denke, dass das SQLStatement "Select CBool(0) as PikCheck, ..." doch dem Typ "Bool" entspricht, oder? In der Table gibt es kein Feld "PikCheck". Diese Spalte wird durch das SQLStatement erzeugt..

    Und was meinst du mit:

     Erzeuge eine booleasche Eigenschaft für die Bindung, die den aus der Datenbank gelesenen Typ mappt.

    mfg eem monarch

    Donnerstag, 20. Dezember 2012 10:38
  • Die einfachste Sache ist, eine Klasse mit den gewünschten Eigenschaften zu erstellen und für jeden gelesenen Datensatz ein Objekt vom Typ dieser Klasse zu erstellen. Diese Objekt sind dann einer Liste hinzuzufügen und die Liste ist im Grid der DataSource-Eigenschaft zuzuweisen. Dann klappt das auch mit der Anzeige einer CheckBox-Spalte.
     
    In Anhängigkeit der weiteren geforderten Bedingungen sind natürlich auch viele andere Lösungswege möglich.
     
    --
    Viele Gruesse
    Peter
    Donnerstag, 20. Dezember 2012 11:00
  • Servus Peter,

    habe es gelöst, habe dem DGV vor der Bindung ein entsprechendes Templat erstellt, welches dann verwendet wird.

    mfg eem monarch

    Donnerstag, 20. Dezember 2012 11:52