Anfängerfrage

01/10/2009 - 21:58 von Markus Hofmann | Report spam
Hallo Leute!
ich hole aus dem Grid den aktuellen Index:
Dim MeinIndex As Integer = 0
MeinIndex= DatView.CurrentRow.Index
Jetzt wird eine andere Zeile angeklickt. Wie kann ich mit dem gespeicherten
Indexwert die vorherige Zeile selektieren?
Ich verzweifle schon langsam an diesem Problem!
Vielen Dank für eure Hilfe.
Markus
 

Lesen sie die antworten

#1 Peter Götz
02/10/2009 - 09:19 | Warnen spam
Hallo Markus,

Hallo Leute!
ich hole aus dem Grid den aktuellen Index:



Aus welchem Grid?
Ich rate mal, es ist ein DataGridView.

Dim MeinIndex As Integer = 0
MeinIndex= DatView.CurrentRow.Index



Wer oder was ist DatView?
Wie und wo hast Du DatView deklariert?

Jetzt wird eine andere Zeile angeklickt.
Wie kann ich mit dem gespeicherten
Indexwert die vorherige Zeile selektieren?
Ich verzweifle schon langsam an diesem Problem!



Ich rate jetzt wieder mal, dass Deine eigentliche Datenquelle
eine DataTable ist, welche über eine DataView an ein
DataGridView gebunden ist.

Mit Hilfe eines CurrencyManagers kannst Du in einer
DataView zwischen den einzelnen Datensàtzen hin und
her navigieren. Das nachfolgende Beispiel, welches Du
einfach in ein leeres Formmodul (Form1.vb) kopierst,
zeigt Dir, wie Du mit Hilfe des CurrencyManagers zu
einem beliebigen Datensatz navigieren kannst und auch,
wie Du Dir ganz einfach den jeweils zuletzt ausgewàhlten
Datensatz (Index / CurrencyManager.Position) merken
kannst.

' /// Code in Form1.vb
Public Class Form1
Private mDT As DataTable
Private mDV As DataView
Private mCurIndex As Integer

Private WithEvents mCM As CurrencyManager
Private WithEvents DGV As DataGridView
Private WithEvents btnAnyRecord As Button
Private WithEvents btnLastCurrentRecord As Button
Private mRnd As Random

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

Me.Size = New Size(350, 450)
Me.MinimumSize = New Size(280, 250)

CreateData()
CreateControls()

DGV.DataSource = mDV
DGV.AutoResizeColumns()

mRnd = New Random(Now.Millisecond)
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("SText", GetType(String))
.Columns.Add("LTexdt", GetType(String))

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

' DataView (mDV) zur DataTable (mDT) erstellen
mDV = New DataView(mDT)

' CurrencyManager (mCM) zur DataView (mDV) erstellen
mCM = _
DirectCast _
(Me.BindingContext(mDV), _
CurrencyManager)

End Sub

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

.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)

btnAnyRecord = New Button
With btnAnyRecord
.Font = New Font("Arial", 8)

.SetBounds _
(Me.ClientSize.Width - 130, _
DGV.Bottom + 10, _
120, 40)

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

.Text = "any record"
End With
Me.Controls.Add(btnAnyRecord)

btnLastCurrentRecord = New Button
With btnLastCurrentRecord
.Font = btnAnyRecord.Font

.SetBounds _
(10, btnAnyRecord.Top, _
120, 40)

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

.Text = "last current record"
End With

Me.Controls.Add(btnLastCurrentRecord)
End Sub

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

' einen zufàlligen Datensatz auswàhlen
Dim NextPos As Integer
mCurIndex = mCM.Position

NextPos = _
mRnd.Next(0, mDT.Rows.Count - 1)

mCM.Position = NextPos

End Sub

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

' zum zuletzt ausgewàhlten Datensatz gehen.
mCM.Position = mCurIndex
End Sub

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

If mCM.Position > -1 Then
' Der Datensatzzeiger zeigt auf einen gültigen Datensatz

Dim DR As DataRow
Dim DRV As DataRowView

' akt. ausgewàhlter Datensatz (DataRowView)
' in der DataView (mDV)
DRV = DirectCast(mCM.Current, DataRowView)

' zugehöriger Datensatz (DataRow)
' in der DataTable (mdDT)
DR = DRV.Row

Me.Text = _
DR.Item(0).ToString & "; " & _
DR.Item(1).ToString & "; " & _
DR.Item(2).ToString
End If
End Sub
End Class
' \\\ E N T E

Nach dem Programmstart siehst Du im DataGridView (DGV)
zwölf Datensatze mit den Monaten Januar bis Dezember.

Mit einem Klick auf den Button "any record" wird zu einem
zufàllig ausgewàhlten Datensatz positioniert.

Mit einem Klick auf den Button "last current record" wird
zum zuletzt ausgewàhlten Datensatz positioniert.


Mehr zum Umgang mit DataTable, DataView und
dem CurrencyManager findest Du unter

www.gssg.de -> Visual Basic -> VB.net

unter den Rubriken

DataGridView
und
DataTable / DataView / CurrencyManager


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

Ähnliche fragen