Hallo zusammen,
ich habe mehrere DGV's in denen ich Abfragen über 2 Tabellen (Access) einlese (Tabelle A daten Tabelle B optionale Daten).
Die Funktion dazu :
Module db
'......
'......
Public Sub Load2Grid(ByRef grid As System.Windows.Forms.DataGridView, ByVal _
abfrage As String)
If grid IsNot Nothing Then
Dim adapter As New System.Data.OleDb.OleDbDataAdapter(abfrage, _
AccessCon)
Dim dataset As New System.Data.DataSet
Try
adapter.Fill(dataset)
grid.DataSource = dataset.Tables(0)
grid.Update()
Catch ex As Exception
MsgBox(ex.Message)
End Try
grid.AutoResizeColumns()
End If
End Sub
'.....
'.....
End Module Funktioniert soweit einwandfrei.
Füge ich jetzt zu dem bereits befüllten DGV eine weiter Spalte hinzu die nur mit Checkboxen
befüllt wird. Die Checkboxen werden gechecked bzw. unchecked abhängig vom Wert einer Spalte.
Wie folgt.
Public Sub RefreshGrid()
Me.Cursor = Cursors.WaitCursor
db.Inititalize() 'Datenbank anbindung läuft in eigenem Modul
DataGridView1.Columns.Clear()
DataGridView1.Update()
' DataGridView mit Datenfüllen
db.Load2Grid(Me.DataGridView1, meine_abfrage)
' Spaltennamen setzen und formatierung
DataGridView1.Columns(0).HeaderText = "..."
DataGridView1.Columns(1).HeaderText = "..."
DataGridView1.Columns(2).HeaderText = "..."
DataGridView1.Columns(3).HeaderText = "..."
DataGridView1.Columns(4).HeaderText = "..."
DataGridView1.Columns(5).DefaultCellStyle.ForeColor = Color.Red
DataGridView1.Columns(5).HeaderText = "..."
DataGridView1.Columns(6).Visible = False
DataGridView1.AutoResizeColumns()
DataGridView1.Update()
' Zusätzliche Spalte einfügen
DataGridView1.Columns.Add("upd", "Kontakt")
' für jede Reihe
For i As Integer = 0 To DataGridView1.Rows.Count - 1
' Cell als CheckBoxCell setzen
DataGridView1.Rows(i).Cells(7) = New DataGridViewCheckBoxCell()
' Abhängig vom Wert in Spalte 6 die Checkbox setzen
If Not IsDBNull(DataGridView1.Rows(i).Cells(6).Value) Then
If DataGridView1.Rows(i).Cells(6).Value = 1 Then
DataGridView1.Rows(i).Cells(7).Value = True
Else
DataGridView1.Rows(i).Cells(7).Value = False
End If
Else
DataGridView1.Rows(i).Cells(7).Value = False
End If
Next
'Und das auch für die anderen 2 DGV´s
End Sub Soweit alles kein Problem, die Daten werden so angezeigt wie ich mir
es vorgestellt habe, da die Checkboxen ja auch funktional sein sollen
habe ich folgenden Handler definiert.
Public Sub DataRowCheck(ByVal sender As System.Object, ByVal e As _
DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick, _
DataGridView2.CellContentClick, DataGridView3.CellContentClick
' Wird das event von den möglichen DGV´s gesendet
If sender Is DataGridView1 Or sender Is DataGridView2 Or sender Is _
DataGridView3 Then
' sender bereitstellen
Dim t As DataGridView = CType(sender, _
System.Windows.Forms.DataGridView)
If t IsNot Nothing Then
't.Update()
' ist auf die richtige Spalte geklickt und nicht auf den
' ColHeader
If e.ColumnIndex = 7 And e.RowIndex >= 0 Then
' verarbeite die entsprechenden Daten
Dim k As String = t.Rows(e.RowIndex).Cells(0).Value
Dim sw As Boolean = t.Rows(e.RowIndex).Cells(7).Value
SetAngemailt(k, sw)
t.Update()
RefreshGrid()
End If
End If
End If
End Sub Alles super, DOCH .... wenn der "User" auf den Colheader
klickt um das DGV zu sortieren, sind die Checkboxen weg,
die Spalte ist da, das DGV ist sortiert, aber die Checkboxen
sind futsch. Ich vermute das es hieran liegt
'.....
DataGridView1.Rows(i).Cells(7) = New DataGridViewCheckBoxCell()
'..... Hat jemand ne Idee ?
Mfg 3rdInvisible |