alle Felder einer DataRow auslesen mittels Schleife

30/01/2008 - 17:25 von Hartmut Callies | Report spam
Hallo,
wie kann ich alle Felder einer DataRow durchlaufen,
ohne as Feld (1, 2, 3, ...) direkt angeben zu messen?

Dim objDataRow As DataRow = Nothing
objDataRow = mDataView.Item(mBindingManager.Position).Row

Console.WriteLine (objDataRow(1))
Console.WriteLine (objDataRow(2))
Ich will nicht jedes Feld der DataRow angeben, sondern
die DataRow z.B. mit einer For-Next-Schleife durchlaufen,
also variabel gestalten.

Hartmut Callies
 

Lesen sie die antworten

#1 Peter Götz
30/01/2008 - 19:11 | Warnen spam
Hallo Hartmut,

wie kann ich alle Felder einer DataRow durchlaufen,
ohne as Feld (1, 2, 3, ...) direkt angeben zu messen?

Dim objDataRow As DataRow = Nothing
objDataRow = mDataView.Item(mBindingManager.Position).Row

Console.WriteLine (objDataRow(1))
Console.WriteLine (objDataRow(2))
Ich will nicht jedes Feld der DataRow angeben, sondern
die DataRow z.B. mit einer For-Next-Schleife durchlaufen,
also variabel gestalten.



For i = 0 to DataTable.Columns.Count -1
console.writeline DataRow.Item(i).ToString
next i

Ich verstehe nicht so ganz wo Dein Problem ist.
Hier mal ein prakt. Beispiel:

' /// Code in einer leeren Form
Public Class Form1
Private mDT As DataTable
Private mDV As DataView
Private WithEvents mCM As CurrencyManager
Private WithEvents DGV As DataGridView


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

DGV = New DataGridView
With DGV
.SetBounds _
(10, 10, _
Me.ClientSize.Width - 20, _
Me.ClientSize.Height - 20)

.Anchor = AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right Or _
AnchorStyles.Bottom

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

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

End With
Me.Controls.Add(DGV)

CreateData()
DGV.DataSource = mDV
DGV.AutoResizeColumns()
End Sub

Private Sub CreateData()
Dim R As New Random
Dim i As Integer
Dim DR As DataRow
mDT = New DataTable
With mDT
.Columns.Add("ID", GetType(Integer))
.Columns.Add("Text", GetType(String))
.Columns.Add("Number", GetType(Double))

For i = 1 To 12
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = MonthName(i, False)
DR.Item(2) = R.Next(10, 500) + R.NextDouble
.Rows.Add(DR)
Next
.AcceptChanges()
End With

mDV = New DataView(mDT)

mCM = DirectCast _
(Me.BindingContext(mDV), _
CurrencyManager)

End Sub

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

If mCM.Position > -1 Then
Dim i As Integer
Dim Buffer As String = ""

Dim DR As DataRow = _
DirectCast(mCM.Current, DataRowView).Row

For i = 0 To mDT.Columns.Count - 1
If Buffer.Length > 0 Then
Buffer &= "; "
End If
Buffer &= DR.Item(i).ToString
Next
Console.WriteLine(Buffer)

Buffer = ""
For i = 0 To DR.ItemArray.GetUpperBound(0)
If Buffer.Length > 0 Then
Buffer &= "; "
End If
Buffer &= DR.ItemArray(i).ToString
Next
Console.WriteLine(Buffer)
End If

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

Jeder Zeilenwechsel im DGV löst Sub mCM_PositionChanged()
aus. Darin werden dann die Items der akt. DataRow und alternativ
auch die einzelnen Felder von DR.ItemArray() durchlaufen.
Was dabei Probleme machen könnte, sehe ich allerdings bisher
nicht so recht.

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

Ähnliche fragen