Hallo zusammen!
Vielen Dank für die Infos.
Ich habe nun so einiges in diese Richtung ausprobiert, aber ohne Erfolg.
Mir geht es bei der Sortierung um folgendes:
- laden von Datenbankinformationen in das ListView
- Sortierung nach Spalte (15) DWG - Pfad
- alle Zeilen mit einem Stringinhalt (N:/...) sollen nach oben verschoben werden
Nach dem befüllen des ListView soll automatisch nach der Spalte (15) sortiert werden, ohne das
ich auf den Spaltenkopf (15) klicken muß.
'per ButtonClick die Infos aus der Datenbank laden
Private Sub cmdDBLoad_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles _
cmdDBLoad.Click
'...
'...
Dim da As New SqlDataAdapter(SQL, conn)
Dim cmdB As New SqlCommandBuilder(da)
Dim ds As New DataSet()
'--ListView / Grundeinstellungen-------------
With ListView1
.Columns.Clear()
.Items.Clear()
.FullRowSelect = True
.View = View.Details
.LabelEdit = True
.AllowColumnReorder = True
.GridLines = True
.Sorting = Forms.SortOrder.None
.OwnerDraw = True
End With
With ListView1.Columns
.Add("DWG", 20) '(00)DWG / Zeichnung vorhanden
.Add("PDF", 20) '(01)PDF / Dokument vorhanden
.Add("Prüfung", 20) '(02)Prüfung / Ok - Nein
'...
.Add("Einheit", 30) '(14)Bestelleinheit
.Add("DWG - Pfad", 150) '(15)DWG - Verzeichnis
.Add("PDF - Pfad", 150) '(16)PDF - Verzeichnis
'...
End With
Try
conn.Open()
da.Fill(ds, "Tabellenname")
conn.Close()
Dim dt As DataTable = ds.Tables("Tabellenname")
Dim dr As DataRow
For Each dr In dt.Rows
Dim LItem As ListViewItem = ListView1.Items.Add("") '(00)DWG /
' Zeichnung vorhanden
LItem.SubItems.Add("").ToString() '(01)PDF /
' Dokument vorhanden
LItem.SubItems.Add("").ToString() '(02)Prüfung /
' Ok - Nein
LItem.SubItems.Add(dr("PD_NUM").ToString()) '(
' 03)Artikelnummer Hoffmann
'...
LItem.SubItems.Add(dr("M_Best_Einheit_ID").ToString()) '(
' 14)Bestelleinheit
LItem.SubItems.Add(dr("M_ZNAME_PLINE").ToString()) '(15)DWG -
' Verzeichnis
LItem.SubItems.Add(dr("M_ZEICHNUNGSNAME").ToString()) '(16)PDF -
' Verzeichnis
'...
Next
Catch ex As Exception
MsgBox(ex.Message)
Return
Finally
'reader.Close()
'con.Close()
End Try
AddHandler Me.ListView1.ColumnClick, AddressOf ColumnClick
End Sub ... dann habe ich diesen - ColumnClick event handler - angelegt.
Private Sub ColumnClick(ByVal o As Object, ByVal e As ColumnClickEventArgs)
Me.ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column)
End Sub ... und diese separate Class.
Imports System
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Collections
Class ListViewItemComparer
Implements IComparer
Private col As Integer
Public Sub New()
col = 0
End Sub
Public Sub New(ByVal column As Integer)
col = column
End Sub
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
Implements IComparer.Compare
Return [String].Compare(CType(x, ListViewItem).SubItems(col).Text, _
CType(y, ListViewItem).SubItems(col).Text)
End Function
End Class Wie schon gesagt, klick ich nach dem befüllen des ListView auf die Spalte (15), so wird nach unten hin sortiert.
Wie bekomme ich es nun hin, dass diese Sortierung automatisch nach dem befüllen des ListView passiert?
Vielen Dank im voraus.
VG
Dirk |