DataView sortieren und im Code verwenden

31/08/2007 - 11:38 von Mark Ferkaluk | Report spam
Hallo NG,

ich hab ein kleines Problem. Ich sortiere ein DataView mit der Sort
Eigenschaft. Also folgendermaßen:

Dim dv As New DataView(dt)
dv.Sort = "Spalte 1, Spalte 2"

dt ist die DataTable mit den Daten.

Funktionieren tut das, aber nur wenn ich den View an ein GridView hànge. Ich
möchte aber im Code auf die sortierten Daten zugreifen. Eigentlich wollte ich
das so machen:

dv.Table.Rows(index).Item("Spalte 1")

Aber das funktioniert nicht.
Wie kann ich nun auf die Daten zugreifen?

Vielen Dank im Voraus.

Viele Grüße,

Mark Ferkaluk
 

Lesen sie die antworten

#1 Peter Götz
31/08/2007 - 12:46 | Warnen spam
Hallo Mark,

ich hab ein kleines Problem. Ich sortiere ein DataView
mit der Sort Eigenschaft. Also folgendermaßen:

Dim dv As New DataView(dt)
dv.Sort = "Spalte 1, Spalte 2"

dt ist die DataTable mit den Daten.

Funktionieren tut das, aber nur wenn ich den View
an ein GridView hànge.



Ein DataView-Objekt hat erst mal nicht mit einem
GridView oder sonstigen Control zu tun.


Ich möchte aber im Code auf die sortierten
Daten zugreifen.



Also musst Du auf Dein Objekt dv zugreifen.

Eigentlich wollte ich
das so machen:

dv.Table.Rows(index).Item("Spalte 1")



Wie und wo wird index erstellt und wie und
wo weist Du index einen Wert zu?


Aber das funktioniert nicht.



Was funktioniert nicht?
Fehler? / Fehlermeldung?

Wie kann ich nun auf die Daten zugreifen?



Das nachfolgende Beispiel zeigt, wie Du auf
Zeilen der DataView und auf die korrespondierenden
Zeilen der zugehörigen DataTable zugreifen kannst.

' /// Code in einer leeren Form1

Public Class Form1
Private mDT As DataTable
Private mDV As DataView
Private WithEvents mCM As CurrencyManager

Private WithEvents btnPrevious As Button
Private WithEvents btnNext As Button

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

CreateData()
CreateControls()

mDV.Sort = "Text"
End Sub

Private Sub CreateControls()
btnPrevious = New Button
With btnPrevious
.SetBounds(10, 10, 60, 30)
.Text = "<"
End With
Me.Controls.Add(btnPrevious)

btnNext = New Button
With btnNext
.SetBounds _
(btnPrevious.Right + 5, 10, 60, 30)

.Text = ">"
End With
Me.Controls.Add(btnNext)
End Sub

Private Sub CreateData()
Dim i As Integer
Dim DR As DataRow

mDT = New DataTable
With mDT
.Columns.Add("ID", GetType(Integer))
.Columns.Add("Text", GetType(String))

For i = 1 To 12
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = MonthName(i)
.Rows.Add(DR)
Next
.AcceptChanges()
End With

mDV = New DataView(mDT)
mCM = DirectCast _
(Me.BindingContext(mDV), _
CurrencyManager)
End Sub

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

mCM.Position += 1
End Sub

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

mCM.Position -= 1
End Sub

Private Sub mCM_PositionChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles mCM.PositionChanged

' Zugriff auf akt. Zeile der DataView
Dim DRV As DataRowView = _
DirectCast(mCM.Current, DataRowView)


' ' alternativ
' DRV = mDV.Item(mCM.Position)


Me.Text = "Position: " & mCM.Position.ToString & _
" | " & DRV.Item(0).ToString & " " & _
DRV.Item(1).ToString

' ZUgriff auf korrespondierende Zeile der DataTable
Dim DR As DataRow
DR = DRV.Row
Dim Index As Integer
Index = mDT.Rows.IndexOf(DR)
Console.WriteLine("Index: " & Index.ToString & _
" | " & _
DR.Item(0).ToString & _
" " & DR.Item(1).ToString)
End Sub
End Class

' \\\ E N T E

In der Sub btnPrevious_Click() siehst Du, auf welche Weise
Du auf Zeilen der DataView (mDV) und / oder auf Zeilen
der DataTable (mDT) zugreifen kannst.
Die beiden Buttons steuern die .Position-Eigenschaft des
CurrencyManagers, mit dem Du durch die Zeilen der
DataView navigieren kannst.

Alle Klarheiten beseitigt?

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

Ähnliche fragen