Datagridview sortieren

03/04/2009 - 12:13 von Norbert Schiller | Report spam
Hallo NG,

die Frage ist wahrscheinlich für manchen etwas trivial, trotzdem muss ich
sie hier leider stellen.

Wie kann man eine Datumsspalte in einem ungebundenen Datagridview sortieren?

Danke für jeden Hinweis. Googlen hat mich leider nicht weitergebracht.


Gruß, Norbert
nschiller@freenet.de
 

Lesen sie die antworten

#1 Peter Götz
03/04/2009 - 14:10 | Warnen spam
Hallo Norbert,

Wie kann man eine Datumsspalte in einem ungebundenen
Datagridview sortieren?



Mit

DGV.Sort(DataGridViewColumn, Direction)

oder mit

DGV.Sort(Comparer)

Hier ein Beispiel mit der ersten Variante.

' /// Code in einem leeren Formmodul (Form1)
Public Class Form1
Private WithEvents DGV As DataGridView
Private mRnd As New Random

Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

Dim i As Integer

Dim Cols() As String = _
{"ID", "Tag", "Datum"}

Dim Types() As System.Type = _
{GetType(Integer), GetType(String), GetType(Date)}

DGV = New DataGridView
With DGV
.DefaultCellStyle.Font = _
New Font("Arial", 12)

.ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 8, FontStyle.Bold)

.Dock = DockStyle.Fill
.AutoGenerateColumns = False

.Columns.Clear()
For i = 0 To Cols.GetUpperBound(0)
.Columns.Add(Cols(i), Cols(i))
.Columns(i).ValueType = Types(i)

.Columns(i).SortMode = _
DataGridViewColumnSortMode.Automatic

Next


End With
Me.Controls.Add(DGV)

InitData()
DGV.AutoResizeColumns()

' Aufsteigend sortieren nach Spalte 2 (Datum)
DGV.Sort _
(DGV.Columns(2), _
System.ComponentModel.ListSortDirection.Ascending)

End Sub


Private Sub InitData()
Dim i As Integer
Dim pArray(2) As Object
Dim D As Date
For i = 1 To 15

D = Date.Today.AddDays(mRnd.Next(1, 500))
pArray(0) = i
pArray(1) = D.ToString("dddd")
pArray(2) = D

DGV.Rows.Add(pArray)

Next
End Sub
End Class
' \\\ E NT E

Nach dem Programmstart sind die Daten im Grid
nach der Spalte "Datum" aufsteigend sortiert.
Durch einen Mausklick auf einen der Spaltenköpfe
kann nach der zugehörigen Spalte auf- oder abwàrts
sortiert werden.

Eine andere Variante wàre, eine DataTable mit
zugehöriger DataView zu erstellen, die DataTable
mit den gewünschten Daten zu füllen und dann
die DataTable via DataView an das Grid binden.

' /// Code in einem leeren Formmodul (Form1)
Public Class Form1
Private WithEvents DGV As DataGridView
Private mDT As DataTable
Private mDV As DataView

Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

DGV = New DataGridView
With DGV
.Dock = DockStyle.Fill
.DefaultCellStyle.Font = _
New Font("Arial", 12)

.ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 8, FontStyle.Bold)
End With
Me.Controls.Add(DGV)

CreateData()

DGV.DataSource = mDV

Dim DGVCol As DataGridViewColumn

For Each DGVCol In DGV.Columns
DGVCol.SortMode = _
DataGridViewColumnSortMode.Automatic
Next

mDV.Sort = mDT.Columns(2).ColumnName

DGV.AutoResizeColumns()

End Sub


Private Sub CreateData()
Dim Rnd As New Random
Dim i As Integer
Dim DR As DataRow
Dim D As Date

mDT = New DataTable
mDT.Columns.Add("ID", GetType(Integer))
mDT.Columns.Add("Tag", GetType(String))
mDT.Columns.Add("Datum", GetType(Date))

For i = 1 To 25
D = Date.Today.AddDays(Rnd.Next(1, 500))
With mDT
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = D.ToString("dddd")
DR.Item(2) = D
.Rows.Add(DR)
End With
Next
mDT.AcceptChanges()

mDV = New DataView(mDT)

End Sub
End Class
' \\\ E N T E

Auch hierbei sind die Daten nach dem Programmstart
erst mal nach der Spalte Datum sortiert und können
wieder durch Mausklick auf einen der Spaltenköpfe
nach der entspr. Spalte sortiert werden.
Zusàtzlich stehen Dir alle Eigenschaften und Methoden
der DataTable und der DataView zur Verfügung (Sortieren,
Suchen, Filtern usw.) , was die Sache sehr komfortabel
macht.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen