| Forum: VB.NET |
Thema:
Re: ComboBox nach DisplayMember sortieren |
Von:
Holger Fleter (
20.04.2004 00:11) |
Hallo Simon,
erst mal Sorry, dass ich so lang nix mehr geschrieben habe.
Danke für Deine Tipps.
Das ist schon so, wie dachte das es gehen müßte, nur ich weiß nicht wie ich es mit der DataView
hinkriege.
Ich hab mir jetzt auf eine zwar unelegante aber einfache Art weitergeholfen.
Ich hänge an die Tabelle noch eine Spalte "Sortierfeld" an und kopiere vor dem Sortieren den Klartext
nachdem sortiert werden soll dahin. Siehe Funktion "Private Sub fill_sort()"
Mit dem Befehl:
DV.Sort = "Sortierfeld asc"
Ist die Reihenfolge im Formular, so wie ich es wollte.
Dazu der Code:
'Deklarationsteil
Private bm As BindingManagerBase
Private DS As DataSet
'Zwei Access-Tabellen werden aus einer Access-Datei geladen.
'Tabelle Item_Art
Private dtItem_Art As DataTable
Private daItem_Art As OleDbDataAdapter
Private cb1 As OleDbCommandBuilder
'Tabelle Einstufung
Private dtEinstufung As DataTable
Private daEinstufung As OleDbDataAdapter
Private cb2 As OleDbCommandBuilder
Dim myDVM As DataViewManager
Dim DV As DataView
Dim coStr As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=
D:\AK_Dokus\Biblioth\Ref_Daten\Item_Art.mdb"
Dim con As OleDbConnection = New OleDbConnection(coStr)
'Das Formular das die Daten anzeigt heißt
Private Sub Item_Art_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
data_load() 'Routine zum Laden der Daten
GridFormatieren()
'AddHandler Me.showSelectedButton.Click, AddressOf Me.showSelectedButton_Click
AddHandler C_Einstufung.DoubleClick, AddressOf Me.test
Timer1.Start()
AddHandler Me.Activated, AddressOf Me.test2
AddHandler Me.Deactivate, AddressOf Me.test3
End Sub
Private Sub data_load()
daItem_Art = New OleDbDataAdapter("SELECT * FROM Item_Art order by Item_Art_Deutsch", con)
daEinstufung = New OleDbDataAdapter("SELECT * FROM Item_Einstufung order by Item_Einstufung",
con)
dtItem_Art = New DataTable("Item_Art")
dtEinstufung = New DataTable("Item_Einstufung")
cb1 = New OleDbCommandBuilder(daItem_Art)
cb2 = New OleDbCommandBuilder(daEinstufung)
DS = New DataSet
DS.Tables.Add(dtItem_Art)
DS.Tables.Add(dtEinstufung)
Try
con.Open()
daItem_Art.MissingSchemaAction = MissingSchemaAction.AddWithKey
daEinstufung.MissingSchemaAction = MissingSchemaAction.AddWithKey
daItem_Art.Fill(dtItem_Art)
daEinstufung.Fill(dtEinstufung)
con.Close()
Catch ex As Exception
MessageBox.Show(ex.ToString)
con.Close()
End Try
dtItem_Art.Columns.Add("Sortierfeld") 'Das ist die Spalte, die mir beim Sortieren hilft
Try
DS.Relations.Add("Einstufung", DS.Tables("Item_Einstufung").Columns("Item_Einstufung_ID"),
DS.Tables("Item_Art").Columns("Item_Einstufung_ID")) 'Hier findet die Verknüpfung statt.
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
myDVM = New DataViewManager(DS) 'DataView zum Anzeigen der Daten.
Dim myDVS As DataViewSetting
For Each myDVS In myDVM.DataViewSettings
myDVS.ApplyDefaultSort = True
Next
DataGrid1.SetDataBinding(myDVM, "Item_Art")
DV = myDVM.CreateDataView(DS.Tables("Item_Art"))
DataGrid1.DataSource = DV
bm = Me.BindingContext(DV)
Init_Einstufung()
T_Dati.DataBindings.Clear()
T_Dati.DataBindings.Add("Text", DV, "Dati")
T_Item_Art_D.DataBindings.Clear()
T_Item_Art_D.DataBindings.Add("Text", DV, "Item_art_Deutsch")
T_Item_Art_UK.DataBindings.Clear()
T_Item_Art_UK.DataBindings.Add("Text", DV, "Item_art_Englisch")
DV.Sort = "Item_Art_Deutsch"
CounterText()
End Sub
Private Sub fill_sort()
Dim a As Object
Dim cRow As DataRow
Dim cCol As DataColumn = dtItem_Art.Columns("Item_Einstufung_ID")
For Each cRow In dtItem_Art.Rows
a = cRow(cCol).GetType.ToString()
If Not (cRow(cCol).GetType Is System.DBNull.Value.GetType) Then
Try
cRow(dtItem_Art.Columns("Sortierfeld")) = Einstufung_as_string(cRow(cCol))
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End If
Next
End Sub
Private Function Einstufung_as_string(ByVal id As Integer) As String
Dim cRow As DataRow
For Each cRow In dtEinstufung.Rows
If cRow(dtEinstufung.Columns("Item_Einstufung_ID")) = id Then
Return (cRow(dtEinstufung.Columns("Item_Einstufung")))
Exit For
End If
Next
End Function
Beste Grüße
Holger
Antworten
Vorsicht bei der Eingabe: Die Zeichen ' oder -- sind nicht erlaubt!