Neue Spalte im Datagridview nicht sortierbar

30/06/2008 - 18:08 von Peter Gast | Report spam
Hi
ich habe ein Datagridview mit einem Dataset gefüllt, das wiederum Daten
einer csv-Datei enthàllt.

Nun füge ich noch eine Spalte hinzu:
Dim colBoolean As System.Data.DataColumn = New System.Data.DataColumn("OK")

colBoolean.DataType = System.Type.GetType("System.Boolean")

ds.Tables(0).Columns.Add(colBoolean)

Me.DataGridView1.DataSource = ds

Im Datagridview kann ich jedoch nicht nach dieser neu eingefügten Spalte
sortieren, obwohl diese richtig angezeigt wird!

Any idea?
Danke Peter
 

Lesen sie die antworten

#1 Peter Götz
30/06/2008 - 20:28 | Warnen spam
Hallo Peter,

ich habe ein Datagridview mit einem Dataset gefüllt,



Du hast vermutlich eine DataTable aus einem DataSet
an ein DataGridView gebunden.

das wiederum Daten
einer csv-Datei enthàllt.

Nun füge ich noch eine Spalte hinzu:
Dim colBoolean As System.Data.DataColumn = _
New System.Data.DataColumn("OK")

colBoolean.DataType = _
System.Type.GetType("System.Boolean")

ds.Tables(0).Columns.Add(colBoolean)

Me.DataGridView1.DataSource = ds

Im Datagridview kann ich jedoch nicht nach dieser
neu eingefügten Spalte sortieren, obwohl diese
richtig angezeigt wird!



Du musst die Spalte für das Sortieren freigeben:

DGV.Columns(x).SortMode = _
DataGridViewColumnSortMode.Automatic

Hier mal ein Beispiel mit einem DataGrid das
erst Inhalte einer DataTable mit 2 Columns
zeigt und mit einem Button-Click der DataTable
eine weitere Spalte (Typ Boolean) hinzufügt,
die dann ebenfalls im Grid gezeigt wird.


' /// Code in einer leeren Form1
Public Class Form1
Private WithEvents 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()

' DataGridView (DGV) an DataTable (mDT)
' über DataView (mDV) binden.
DGV.DataSource = mDV

DGV.AutoResizeColumns()
End Sub

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

AddColumn()
End Sub

Private Sub mDT_ColumnChanged _
(ByVal sender As Object, _
ByVal e As DataColumnChangeEventArgs _
) Handles mDT.ColumnChanged

' Button freigeben, solange die DataTable < 3 Spalten hat.
' Button sperren, wenn die DataTable 3 Spalten hat.
Btn.Enabled = (mDT.Columns.Count < 3)
End Sub

Private Sub AddColumn()
' Neue Spalte (Typ Boolean) der bereits
' existierenden DataTable mDT hinzufügen.
Dim DC As New DataColumn("OK", GetType(Boolean))
mDT.Columns.Add(DC)

Dim i As Integer
For i = 0 To mDT.Rows.Count - 1
mDT.Rows(i).Item(2) = (i Mod 2 = 0)
Next

' Sortieren der neuen Spalte im DGV erlauben.
DGV.Columns(2).SortMode = _
DataGridViewColumnSortMode.Automatic

DGV.AutoResizeColumns()
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", 10)

.ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 8, FontStyle.Bold)
End With
Me.Controls.Add(DGV)

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

.Anchor = AnchorStyles.Right Or _
AnchorStyles.Bottom

.Text = "Add Column"

End With
Me.Controls.Add(Btn)
End Sub

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

' neue DataTable mit 2 Columns erstellen
' und mit Daten füllen.
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

' DataView zur DataTable erstellen
mDV = New DataView(mDT)
End Sub
End Class
' \\\ E N T E

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

Ähnliche fragen