Hallo Dieter und Forum-Gemeinde,
Arbeite mit ADODB.Recordset, das im Grid geclont wird. Das Recordset selbst enthät keine Sortierung. Autosort steht auf True.
Nachfolgend der Code für das Erstellen des Grids.Public Sub MakeGrid()
Dim I As Integer
' Spalten festlegen
With Grid1
' autom. Neuzeichnen des DataGrids unterbinden
.LockUpdate True
.CheckBoxStyle = CHECKBOX_XP
' Recordset-Kopie erstellen
.CreateClone = True
' Recordset zuweisen
'.Clear (True)
Set .Recordset = mRS
' Eigenschaften "Einladungs-Spalte"
With .Columns("Einladung")
.Caption = "Einladung"
.ColType = TYPE_CHECKBOX
.Align = ALIGNMENT_CENTER
.HeadAlign = ALIGNMENT_LEFT
End With
With .Columns("Plz")
.BackColor = &HFDCEBB
End With
With .Columns("Ort")
.BackColor = &HFDCEBB
End With
With .Columns("Kreis")
.BackColor = &HFDCEBB
End With
With .Columns("Potential")
.BackColor = &HC0C0FF
.Align = ALIGNMENT_RIGHT
.HeadAlign = ALIGNMENT_RIGHT
.InputType = INPUT_NUMERIC
End With
With .Columns("Eingeladen")
.BackColor = &H8000&
.Align = ALIGNMENT_RIGHT
.HeadAlign = ALIGNMENT_RIGHT
.InputType = INPUT_NUMERIC
End With
With .Columns("Diff-Eingeladen")
.BackColor = &H8000&
.Align = ALIGNMENT_RIGHT
.HeadAlign = ALIGNMENT_RIGHT
.InputType = INPUT_NUMERIC
End With
With .Columns("Proz-Eingeladen")
.BackColor = &H8000&
.Align = ALIGNMENT_RIGHT
.HeadAlign = ALIGNMENT_RIGHT
.InputType = INPUT_NUMERIC
End With
With .Columns("Teilnahme")
.BackColor = &H40C0&
.Align = ALIGNMENT_RIGHT
.HeadAlign = ALIGNMENT_RIGHT
.InputType = INPUT_NUMERIC
End With
With .Columns("Diff-Teilnahme")
.BackColor = &H40C0&
.Align = ALIGNMENT_RIGHT
.HeadAlign = ALIGNMENT_RIGHT
.InputType = INPUT_NUMERIC
End With
With .Columns("Proz-Teilnahme")
.BackColor = &H40C0&
.Align = ALIGNMENT_RIGHT
.HeadAlign = ALIGNMENT_RIGHT
.InputType = INPUT_NUMERIC
End With
' Filterkriterien...
ReDim sFilter(Grid1.Cols)
' Filterzeile oberhalb der Spaltenköpfe anzeigen
.FilterAlign = FILTER_ALIGN_TOP
.FilterForeColorDisabled = vbGrayText
.FilterVisible = True
.AllowFilterEdit = True
.FilterMoveTAB = False
.FilterTextFixCol = "Suche:"
' Nach Name sortieren
.ShowSortSymbols = True
.AutoSort = True
.DoSort "PLZ", SORT_ASC
' interaktives Ändern der Spaltenbreiten zulassen
.AllowColumnSizing = True
' Drag & Drop von Spalten zulassen
.AllowColumnReorder = True
' Breite der feststehenden Spalte
.FixedCol = True
.FixedColWidth = 800
.FooterVisible = True
' Neuzeichnen des DataGrids wieder aktivieren
.LockUpdate False
.Refresh
.Row = 1
' Summe der Beträge ermitteln
Call ShowSumme
End With
Call AutoColSevGrid(Me, Grid1)
'mRS.Close
Exit Sub
End Sub Dann noch die Prozedur, die das Recordset erzeugt:
Public Sub LoadRecordset(sSql, sGroup, sOrder As String)
Dim I As Integer
'Debug.Print "Loadrecordset: " & sSql & sGroup & sORDER
Set mRS = New ADODB.Recordset
mRS.CursorType = adOpenStatic
mRS.LockType = adLockOptimistic
Debug.Print sSql
mRS.Open sSql & sGroup & sOrder, mCon, , , adCmdText
'Debug.Print mRs.RecordCount
Exit Sub
End Sub und abschließend die Prozedur für das ERzeugen des SQL-Strings:
Private Sub txtGruppierungen_Click()
Select Case Me.txtGruppierungen.Text
Case "Alle Datensätze"
sSql = " ..." & _
"WHERE tbl_Drucklisten.TerminTyp<>'ER' Or" & _
"tbl_Drucklisten.TerminTyp Is Null "
Case Is <> "Alle Datensätze"
sSql = "...."
End Select
Call LoadRecordset(sSql, sGroup, sOrder)
Me.Grid1.Clear (True)
Me.Grid1.Refresh
Call MakeGrid
Exit Sub
End Sub SQL-Abfrage wurde gekürzt.
Was ist falsch, dass durch Klick auf den Spaltenheader nicht sortiert wird. Ein Doppelklick setzt ein zusätzliches Sortiersymbol.
Für die Unterstüzung schon jetzt recht herzlichen Dank.
Gruß
Udo |