Avatar billede force_master Praktikant
15. marts 2004 - 18:33 Der er 13 kommentarer og
1 løsning

Sortering i listview

Hvordan sorter man i listview.
har prøvet at vælge "sorted" key =0 men den sorter godt nok colonne 1 , men der manger masse data i de andre colonner.
kører jeg ikke sorteret er alle dataerne der.

her er koden jeg læser det ind med
Private Sub Form_Load()
ListView1.ListItems.Clear

Set Myconn = CreateObject("ADODB.Connection")
Myconn.Open "driver={Microsoft Access Driver (*.mdb)}; DBQ= " & App.Path & "\debitor.mdb"
On Error Resume Next
SQL = "Select * FROM deb"
Set rs = Myconn.Execute(SQL)
  Do While Not rs.EOF
  ListView1.ListItems.Add (i + 1), , rs("Navn")
      ListView1.ListItems(i + 1).SubItems(1) = rs("Adr")
        ListView1.ListItems(i + 1).SubItems(2) = rs("adr2")
        ListView1.ListItems(i + 1).SubItems(3) = rs("postnr")
        ListView1.ListItems(i + 1).SubItems(4) = rs("by")
        ListView1.ListItems(i + 1).SubItems(5) = rs("tlf")

 
rs.movenext
Loop
Myconn.Close

End Sub

håber i kan hjælpe.

MVH
Force_Master
Avatar billede martin_moth Mester
15. marts 2004 - 19:09 #1
Ja, det har vist ikke noget med sagen at gøre, men du ændrer aldrig værdien af i.
Mangler du ikke et i = i+1
Avatar billede tubber Juniormester
15. marts 2004 - 19:18 #2
Private Sub Form_Load()
ListView1.ListItems.Clear

Set Myconn = CreateObject("ADODB.Connection")
Myconn.Open "driver={Microsoft Access Driver (*.mdb)}; DBQ= " & App.Path & "\debitor.mdb"
On Error Resume Next
SQL = "Select * FROM deb"
Set rs = Myconn.Execute(SQL)
  i = 0
  Do While Not rs.EOF
  ListView1.ListItems.Add (i), , rs("Navn")
      ListView1.ListItems(i).SubItems(1) = rs("Adr")
        ListView1.ListItems(i).SubItems(2) = rs("adr2")
        ListView1.ListItems(i).SubItems(3) = rs("postnr")
        ListView1.ListItems(i).SubItems(4) = rs("by")
        ListView1.ListItems(i).SubItems(5) = rs("tlf")
        i = i + 1
  rs.movenext
Loop
Myconn.Close

End Sub
Avatar billede tubber Juniormester
15. marts 2004 - 19:21 #3
det må være noget der ligner det du skal bruge til at tilføje data med......
for ellers tilføjer den posterne på den samme plads da du ikke får i til at blive højere.......
Avatar billede tubber Juniormester
15. marts 2004 - 19:23 #4
Første gennemløb i det jeg har lavet sætter den ind på plads 0, andet gennemløb plads 1 og 3 gennemløb plads 2.....

I din første kode, hvis jeg tyder den rigtigt sætter den ind på plads 1 i første gennemløb (i + 1 giver 1) og det gør den sørme også i andet gennemløb da den ikke forhøjer i......

Løser det ikke problemet må du lige specificere ud
Avatar billede tubber Juniormester
15. marts 2004 - 19:24 #5
hvad det er du helt nøjagtigt vil ha det skal gøre din kode ?

(den lille pillede lige ved musen....).....
Avatar billede force_master Praktikant
15. marts 2004 - 19:37 #6
i skal være 1 til start , da listview starter med 1 og ikke 0
men ligemeget,
her er billedet usorteret.
http://www.danskvideokonvertering.dk/usort.jpg
og her sorteret efter første kolonne
http://www.danskvideokonvertering.dk/sort.jpg
sorter jeg efter anden colonne ser det sådan ud
http://www.danskvideokonvertering.dk/rod.jpg
her er hvordan jeg sorter , første sortering er key = 0 anden key =1.
http://www.danskvideokonvertering.dk/option.jpg
Avatar billede tubber Juniormester
15. marts 2004 - 20:01 #8
er det vb eller vb.net du sidder med ?
sidder lige og søger lidt og fandt noget men kun til .net

ListView1.Items.AddRange(New ListViewItem() {listViewItem1, listViewItem2, listViewItem3, listViewItem4})

altså: ListView1.Items.AddRange(New ListViewItem() {navn, adresse, adresse2, postnummer, minby, land})
Avatar billede tubber Juniormester
15. marts 2004 - 20:03 #9
og så du en fejl jeg ved ikke om det er den der driller, men du har et rs der hedder "by"

DET MÅ DET IKKE for by er reseveret i VB.......så lige en nem lille regel jeg har lavet.......:O)

Når jeg laver følgende så ser det sådan her ud....:
Variabel = varNavn
Recordset = rsNavn
Tabel = tblNavn
Database = dbNavn
osv......så forklare du indirekte i din kode hvad du arbejder med samt du sikre dig du ikke rammer reserverede ord.....
Avatar billede tubber Juniormester
15. marts 2004 - 20:06 #10
Her er en sorterings function fra msdn ved ikke om det kan hjælpe......

[Visual Basic]
Imports System
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Collections


Namespace ListViewSortFormNamespace

    Public Class ListViewSortForm
        Inherits Form

        Private listView1 As ListView

        Public Sub New()
            ' Create ListView items to add to the control.
            Dim listViewItem1 As New ListViewItem(New String() {"Banana", "a", "b", "c"}, -1, Color.Empty, Color.Yellow, Nothing)
            Dim listViewItem2 As New ListViewItem(New String() {"Cherry", "v", "g", "t"}, -1, Color.Empty, Color.Red, New Font("Microsoft Sans Serif", 8.25F, FontStyle.Regular, GraphicsUnit.Point, CType(0, System.Byte)))
            Dim listViewItem3 As New ListViewItem(New String() {"Apple", "h", "j", "n"}, -1, Color.Empty, Color.Lime, Nothing)
            Dim listViewItem4 As New ListViewItem(New String() {"Pear", "y", "u", "i"}, -1, Color.Empty, Color.FromArgb(CType(192, System.Byte), CType(128, System.Byte), CType(156, System.Byte)), Nothing)

            'Initialize the ListView control and add columns to it.
            Me.listView1 = New ListView

            ' Set the initial sorting type for the ListView.
            Me.listView1.Sorting = SortOrder.None
            ' Disable automatic sorting to enable manual sorting.
            Me.listView1.View = View.Details
            ' Add columns and set their text.
            Me.listView1.Columns.Add(New ColumnHeader)
            Me.listView1.Columns(0).Text = "Column 1"
            Me.listView1.Columns(0).Width = 100
            listView1.Columns.Add(New ColumnHeader)
            listView1.Columns(1).Text = "Column 2"
            listView1.Columns.Add(New ColumnHeader)
            listView1.Columns(2).Text = "Column 3"
            listView1.Columns.Add(New ColumnHeader)
            listView1.Columns(3).Text = "Column 4"
            ' Suspend control logic until form is done configuring form.
            Me.SuspendLayout()
            ' Add Items to the ListView control.
            Me.listView1.Items.AddRange(New ListViewItem() {listViewItem1, listViewItem2, listViewItem3, listViewItem4})
            ' Set the location and size of the ListView control.
            Me.listView1.Location = New Point(10, 10)
            Me.listView1.Name = "listView1"
            Me.listView1.Size = New Size(300, 100)
            Me.listView1.TabIndex = 0
            ' Enable editing of the items in the ListView.
            Me.listView1.LabelEdit = True
            ' Connect the ListView.ColumnClick event to the ColumnClick event handler.
            AddHandler Me.listView1.ColumnClick, AddressOf ColumnClick

            ' Initialize the form.
            Me.AutoScaleBaseSize = New Size(5, 13)
            Me.ClientSize = New Size(400, 400)
            Me.Controls.AddRange(New Control() {Me.listView1})
            Me.Name = "ListViewSortForm"
            Me.Text = "Sorted ListView Control"
            ' Resume layout of the form.
            Me.ResumeLayout(False)
        End Sub 'New


        ' ColumnClick event handler.
        Private Sub ColumnClick(ByVal o As Object, ByVal e As ColumnClickEventArgs)
            ' Set the ListViewItemSorter property to a new ListViewItemComparer
            ' object. Setting this property immediately sorts the
            ' ListView using the ListViewItemComparer object.
            Me.listView1.ListViewItemSorter = New ListViewItemComparer(e.Column)
        End Sub

    End Class

    ' Implements the manual sorting of items by columns.
    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
End Namespace


Ellers tror jeg jeg vil vente med at komme med mere indtil jeg får installeret vb igen :O) har lige samlet min spand på ny og geninstalleret efter crash.......
Avatar billede tubber Juniormester
15. marts 2004 - 20:11 #11
http://www.freevbcode.com/source/ListView_Sort.zip der er noget sourcecode som er freeware.......

Den kan du jo også kigge lidt på :)
Avatar billede force_master Praktikant
15. marts 2004 - 20:20 #12
det tror jeg bestemt kan bruges ,
også tak for "by", den havde drillet mig længe.
må se hvordan pokker jeg får de her point tilkendt dig

MVH
Force MAster
Avatar billede tubber Juniormester
15. marts 2004 - 20:35 #13
Skal lige svare og det var da så lidt :)

Skulle det være en anden gang :)
Avatar billede tubber Juniormester
15. marts 2004 - 20:35 #14
Prøver igen - SVAR!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester