Position einer verschobenen DataGridView Spalte?

22/05/2009 - 09:38 von Steffen Meyer | Report spam
Hallo,

ich habe VB 2005 und frage mich gerade, wie es möglich ist, bei einem
DataGridView die Position einer Spalte zu ermittel, nachdem diese verschoben
wurde.
Mit DataGridView.columns("Spaltenname").Index erhalte ich nach dem
Verschieben immernoch die ursprüngliche Position.

Besten Danke
Steffen
 

Lesen sie die antworten

#1 Peter Götz
22/05/2009 - 17:13 | Warnen spam
Hallo Steffen,

ich habe VB 2005 und frage mich gerade, wie es
möglich ist, bei einem DataGridView die Position
einer Spalte zu ermittel, nachdem diese verschoben
wurde.



Eine DataGridViewColumn hat eine Index-Eigenschaft
und eine DisplayIndex-Eigenschaft.

MomentanePosition = DGV.Columns(x).DisplayIndex

Mit DataGridView.columns("Spaltenname").Index
erhalte ich nach dem Verschieben immernoch die
ursprüngliche Position.



Das ist auch gut so, denn so hàttest Du ja keine
Möglichkeit mehr, eine DGV-Column über ihren
Index wieder zu finden.


Hier ein kleines Beispiel, das den .DisplayIndex bei
jedem Button_Click abfragt und àndert. Kopiere den
Code einfach in ein leeres Formmodul (Form1.vb)

' /// Code in Formmodul Form1.vb
Public Class Form1
Private mDT As DataTable
Private mDV As DataView
Private WithEvents DGV As DataGridView
Private WithEvents Btn As Button

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

CreateControls()
CreateData()
With DGV
.DataSource = mDV
.AutoResizeColumns()
End With
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("LText", 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

mDV = New DataView(mDT)
End Sub

Private Sub CreateControls()
Btn = New Button
With Btn
.SetBounds _
(Me.ClientSize.Width - 110, _
Me.ClientSize.Height - 50, _
100, 40)

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

.Text = "click me!"
End With
Me.Controls.Add(Btn)

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

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

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

If DGV.Columns(1).DisplayIndex = 1 Then
DGV.Columns(1).DisplayIndex = 2
Else
DGV.Columns(1).DisplayIndex = 1
End If

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

Programm starten und auf den Button klicken und
nochmal klicken und wieder klicken usw. ...

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

Ähnliche fragen