Group:  VB.NET » microsoft.public.de.german.entwickler.dotnet.vb
Thread: Datum sortieren in DataGridView

Datum sortieren in DataGridView
"Markus Goeldi" <a.b[ at ]c.de> 11/2/2006 9:16:59 AM
hallo ng

ich habe im datagridview eine DataGridViewTextBoxColumn 'datum', welche wie
befüllt wird:

If myPartner.Geburtsdatum = Nothing Then
myRow(7) = "" 'sonst wird im grid "01.01.0001" angezeigt
Else
myRow(7) = myPartner.Geburtsdatum
End If

myDataGridView.Rows.Add(myRow)

wobei myPartner.Geburtsdatum vom typ=date ist, aber auch nothing sein kann.

möchte ich nun auf dieser column sortieren, geht das nicht wenn ein
datum=nothing ist. folgende fehlermeldung:

System.ArgumentException wurde nicht behandelt.
Message="Das Objekt muss den Typ "String" haben."
Source="mscorlib"

nun meine frage:
wie kann ich nach datumsfelder sortieren, wenn diese NULL/nothing sein
können?

merci für tips/hinweise
gruss markus


Re: Datum sortieren in DataGridView
"Peter Fleischer" <peter.fleischer_nospam_[ at ]gmx.de> 11/2/2006 12:00:16 PM
Markus Goeldi wrote:
....
[Quoted Text]
> ich habe im datagridview eine DataGridViewTextBoxColumn 'datum',
> welche wie befüllt wird:
>
> If myPartner.Geburtsdatum = Nothing Then
> myRow(7) = "" 'sonst wird im grid "01.01.0001" angezeigt
> Else
> myRow(7) = myPartner.Geburtsdatum
> End If
>
> myDataGridView.Rows.Add(myRow)
>
> wobei myPartner.Geburtsdatum vom typ=date ist, aber auch nothing sein
> kann.
>
> möchte ich nun auf dieser column sortieren, geht das nicht wenn ein
> datum=nothing ist. folgende fehlermeldung:
>
> System.ArgumentException wurde nicht behandelt.
> Message="Das Objekt muss den Typ "String" haben."
> Source="mscorlib"
>
> nun meine frage:
> wie kann ich nach datumsfelder sortieren, wenn diese NULL/nothing sein
> können?

Markus,
du nutzt die intern vom DataGridView implizit erzeugte Tabelle, die für jede
Zelle eine Zeichenkette enthält. Dein Ansinnen ist damit nicht bzw. nur mit
Aufwand realisierbar. Besser wäre es, wenn du das DataGridView mit einer
gebundenen DataTable bzw. DataView nutzt. Das Grid zeigt dann jeden
Zellinhalt an, sortwird aber über die Sicht. Somint kannst du problemlos
auch nach einer Datumsspalte sortieren, auch wenn diese DBNull-Werte
enthält.

Peter


Re: Datum sortieren in DataGridView
Peter_Götz 11/2/2006 12:12:31 PM
Hallo Markus,

[Quoted Text]
> ich habe im datagridview eine DataGridViewTextBoxColumn 'datum',
welche wie
> befüllt wird:

....schnipp...

> wobei myPartner.Geburtsdatum vom typ=date ist, aber auch nothing sein
kann.
>
> möchte ich nun auf dieser column sortieren, geht das nicht wenn ein
> datum=nothing ist. folgende fehlermeldung:

Schau Dir mal das nachfolgende Beispiel an.
1 leere Form: Form1

' /// Code in Form1
Public Class Form1
Private WithEvents DGV As DataGridView
Private WithEvents Btn As Button

Private mDT As DataTable
Private mDV As DataView
Private mRnd As Random


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

' DataGridView erstellen
DGV = New DataGridView
With DGV
.Bounds = New Rectangle _
( _
10, 10, _
Me.ClientSize.Width - 20, _
Me.ClientSize.Height - 70 _
)
.Anchor = AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Bottom Or _
AnchorStyles.Right

End With
Me.Controls.Add(DGV)
MakeData()

' Button erstellen
Btn = New Button
With Btn
.Size = New Size(90, 40)
.Location = New Point _
( _
Me.ClientSize.Width - 100, _
DGV.Bottom + 10 _
)

.Anchor = AnchorStyles.Right Or _
AnchorStyles.Bottom
.Font = New Font("Arial", 8)
.Text = "Sort Datum"
End With
Me.Controls.Add(Btn)

' DataTable/DataView erstellen und mit Daten füllen
MakeData()
DGV.DataSource = mDV

' Spalteninhalt von Spalte 0 im DataGridView
" rechts ausrichten
DGV.Columns(0).DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.MiddleRight

DGV.AutoResizeColumns()
End Sub

Private Sub MakeData()
' Erstellt eine DataTable (mDT) mit
' zugehöriger DataView (mDV)
' und füllt die DataTable mit Zufallsdaten

Dim i As Integer
Dim DR As DataRow
mDT = New DataTable
mDT.Columns.Add("ID", GetType(Integer))
mDT.Columns.Add("Datum", GetType(Date))
mDT.Columns(1).AllowDBNull = True

For i = 1 To 99
DR = mDT.NewRow
DR.Item(0) = i
If i Mod 10 = 0 Then
DR.Item(1) = DBNull.Value
Else
DR.Item(1) = GetRndDate()
End If
mDT.Rows.Add(DR)
Next
mDT.AcceptChanges()

mDV = New DataView(mDT)

End Sub

Private Function GetRndDate() As Date
' Zufälliges Datum erzeugen
If mRnd Is Nothing Then
mRnd = New Random
End If
Return [Date].Today.AddDays(mRnd.Next(0, 500))
End Function

Private Sub Btn_Click _
( _
ByVal sender As Object, _
ByVal e As System.EventArgs _
) _
Handles Btn.Click

Static Switch As Boolean
Switch = Not Switch
If Switch Then
mDV.Sort = "Datum ASC"
Else
mDV.Sort = "Datum DESC"
End If
End Sub
End Class
' \\\ E N T E

Nach dem Programmstart, wird die DataTable (mDT) mit Daten gefüllt,
eine zugehörige DataView (mDV) erstellt und diese dem DataGridView
(DGV) als DataSource zugewiesen. Nun kann durch Klick auf die
Spaltenköpfe im DataGridView auf- und abwärts sortiert werden oder
wechselseitig auf- oder abwärts nach Datum durch einen Mausklick auf
den Button.

DBNull.Value ist das "hüpfende Komma"!

Alles klar?

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



Home | Search | Terms | Imprint
Newsgroups Reader