Ändern der Reihenfolge im DGV => Column(x).Index

06/04/2008 - 09:08 von Hans Wagner | Report spam
Hallo,
ich benutze ein DGV mit dem Beispiel DataGridView RowError von Hrn
Goetz. Hioer ist es möglich mit der Eingabetaste zur nàchsten aktiven
Zelle springt.
Dies funktioniert auch sehr gut. Aber, wenn ich nun nach Erstellung des
Grids Spalten hinzufüge oder mit DisplayIndex in der Reihenfolge àndere
Springt dies Funktion beid er Return Taste immer den Index an. Und der
wurde ja geàndert. Eine Index Änderung der Columns ist ja nicht möglich.
Wie kann man dies umgehen?

Danke
Hans
 

Lesen sie die antworten

#1 Peter Götz
06/04/2008 - 20:22 | Warnen spam
Hallo Hans,

ich benutze ein DGV mit dem Beispiel DataGridView
RowError von Hrn Goetz. Hioer ist es möglich mit der
Eingabetaste zur nàchsten aktiven Zelle springt.
Dies funktioniert auch sehr gut. Aber, wenn ich nun nach
Erstellung des Grids Spalten hinzufüge oder mit
DisplayIndex in der Reihenfolge àndere Springt dies
Funktion beid er Return Taste immer den Index an. Und
der wurde ja geàndert. Eine Index Änderung der Columns
ist ja nicht möglich.
Wie kann man dies umgehen?



Na ja, Du solltest Dir mal genauer ansehen, was der Code
im Klassenmodul gsDataGridView.vb macht. Die eigentliche
Funktionalitàt dieser Klasse liegt in der Function ProcessRightKey,
in der jeweils die Spalte mit dem nàchsthöheren Index ausgewàhlt
wird. Wenn Du die Spaltenreihenfolge durch Setzen von
Displayindex ànderst dann klappt das so nicht mehr.
Statt die DataGridViewColumns nach dem Spaltenindex zu
durchlaufen musst Du Dich eben am DisplayIndex orientieren.
Die geànderte Function ProcessRightKey müsste dann z.B.
so aussehen:


Public Shadows Function ProcessRightKey _
(ByVal keyData As Keys) As Boolean

' Prüfen, ob es sich um die umgeleitete Eingabetaste handelt.
If (keyData And Keys.KeyCode) = Keys.Enter Then

Dim DGVC As DataGridViewCell = MyBase.CurrentCell

' DGVC is Nothing kann vorkommen, wenn für alle
' Spalten .Columns.Visible = False gesetzt ist.
If DGVC IsNot Nothing Then
Dim CurrentCol As DataGridViewColumn = _
MyBase.Columns(MyBase.CurrentCellAddress.X)

Dim dgvCol As DataGridViewColumn = _
MyBase.Columns.GetNextColumn _
(CurrentCol, DataGridViewElementStates.Visible, _
DataGridViewElementStates.ReadOnly)

If dgvCol IsNot Nothing Then
MyBase.CurrentCell = _
MyBase.CurrentRow.Cells(dgvCol.Index)
Else
Dim RowIndex As Integer
Dim ColIndex As Integer

RowIndex = MyBase.CurrentCellAddress.Y + 1
If RowIndex < MyBase.Rows.Count Then

ColIndex = _
MyBase.Columns.GetFirstColumn _
(DataGridViewElementStates.Visible, _
DataGridViewElementStates.ReadOnly).Index

MyBase.CurrentCell = _
MyBase.Rows(RowIndex).Cells(ColIndex)
End If
End If
Return True
End If
End If

' Normale Ereignisbehandlung, wenn
' nicht die Eingabetaste gedrückt war
Return MyBase.ProcessRightKey(keyData)
End Function

Der übrige Code im Klassenmodul gsDataGridView.vb bleibt
unveràndert.

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

Ähnliche fragen