[VB 2008] Combobox (meerdere items) plaatsen op form traag

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb de volgende code:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 Dim dsTest As New DataSet
        Dim dtTest As New DataTable
        Dim dcTest As New DataColumn
        Dim cmb As New ComboBox

        dsTest.Tables.Add(dtTest)
        dsTest.Tables(0).Columns.Add(dcTest)

        Try
            For aa As Integer = 1 To 10000
                dsTest.Tables(0).Rows.Add(aa)
            Next aa
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

        cmb.DataSource = dsTest.Tables(0)

        cmb.Width = 100
        cmb.Height = 20

        cmb.Location = New Point(5, 100)
  Me.Controls.Add(cmb)


Dit is een combobox met 10000 items, wanneer ik deze code uitvoer zonder de 'Me.Controls.Add(cmb)' gaat alles heel snel, maar het plaatsen van de cmb op het form kost echt heel veel tijd. Ik heb in meerdere forms problemen met databinding aan de combobox, dit is bij meerdere records enorm traag. Vandaar dat ik het nu aan het testen ben om sneller te maken. Heeft iemand nog een idee hoe ik dit kan versnellen?

Ik heb echt al heel veel gezocht op internet/fok, maar kom hier niet verder mee. Er staan af en toe wel wat 'oplossingen', maar bij mij wordt het nog niet sneller.

Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 19:58

Sebazzz

3dp

Probeer eens de Suspend/ResumeLayout methodes.
En volgens mij is er sowieso iets mis: waarom wil je 10k items in een combobox?
Het is handiger als je een andere optie zoekt, want dit kan nooit een usability award krijgen.

[ Voor 66% gewijzigd door Sebazzz op 09-06-2010 17:01 ]

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 09-09 10:50
Een ComboBox is gewoon niet gemaakt om 10.000 items te tonen, wat heb je daar als gebruiker in godsnaam aan? Er is totaal geen filtering ofzo in de ComboBox dus de gebuiker zal echt zelf één item uit 10.000 items moeten gaan zoeken... Niet echt handig!

Ik weet niet wat je precies in je ComboBox doet, maar kun je niet beter een extra 'filter' gebruiken? Stel bijvoorbeeld dat je 10.000 namen in je ComboBox hebt, dan kun je veel beter eerst een andere ComboBox gebruiken die A t/m Z toont, en dan, op basis van de letter in de eerste ComboBox, de tweede ComboBox vullen met alleen de namen die met die letter beginnen. Standaard voorbeeldje maar het is voor heel veel data van toepassing.

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Wat gebruikt gaan worden zijn ook geen 10000 items, maar maximaal 1000 denk ik. Dit was alleen voor het voorbeeld, zodat ik goed kan uitzoeken of er verbeteringen mogelijk zijn.

probleem is dat er al een tijd met de applicatie wordt gewerkt en de gebruikers zeer tevreden zijn met de huidige comboboxen, alleen duurt het zolang om deze te vullen.

Acties:
  • 0 Henk 'm!

Verwijderd

Zelfs 1000 items is veels te veel voor een combobox.

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 11:10

Haan

dotnetter

De beste manier om het sneller te krijgen is om minder items te tonen ;) Zelfs 1000 is nog veel te veel om nuttig te kunnen zijn. Zie bijvoorbeeld de post van NickThissen voor een mogelijke andere werkwijze

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja dat begrijp ik. Het gaat bijvoorbeeld om het kiezen een relatie in een bepaald form.
De huidige methode (als het form eenmaal gevuld is) is gewoon een paar letters intikken en dan wordt deze aangevuld. Dit werkt natuurlijk behoorlijk gemakkelijk.

Is er iemand die een andere oplossing heeft die toch ook heel makkelijk is voor de gebruikers, wat ik tot nu toe kan verzinnen is toch allemaal wel een stukje teruggaand in de gebruikersvriendelijkheid (traagheid is idd overigens ook niet echt gebruikersvriendelijk, dus ben op zoek naar een goed alternatief).

Acties:
  • 0 Henk 'm!

Verwijderd

Dan kan je het beste een TextBox met Autocompletion gebruiken, lijkt mij.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Haan schreef op donderdag 10 juni 2010 @ 10:12:
De beste manier om het sneller te krijgen is om minder items te tonen ;) Zelfs 1000 is nog veel te veel om nuttig te kunnen zijn. Zie bijvoorbeeld de post van NickThissen voor een mogelijke andere werkwijze
Deze snap ik, maar dan zit je dus met 2 comboboxen voor 1 veld. Dat vind ik toch nog iets te veel van het goede.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op donderdag 10 juni 2010 @ 10:15:
Dan kan je het beste een TextBox met Autocompletion gebruiken, lijkt mij.
Ok, dan wordt opzoeken natuurlijk wel wat lastiger, maar dan zou ik dat mogelijk met een apart scherm kunnen doen.

Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 16:40
Verwijderd schreef op woensdag 09 juni 2010 @ 16:42:
Ik heb de volgende code:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 Dim dsTest As New DataSet
        Dim dtTest As New DataTable
        Dim dcTest As New DataColumn
        Dim cmb As New ComboBox

        dsTest.Tables.Add(dtTest)
        dsTest.Tables(0).Columns.Add(dcTest)

        Try
            For aa As Integer = 1 To 10000
                dsTest.Tables(0).Rows.Add(aa)
            Next aa
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

        cmb.DataSource = dsTest.Tables(0)

        cmb.Width = 100
        cmb.Height = 20

        cmb.Location = New Point(5, 100)
  Me.Controls.Add(cmb)


Dit is een combobox met 10000 items, wanneer ik deze code uitvoer zonder de 'Me.Controls.Add(cmb)' gaat alles heel snel, maar het plaatsen van de cmb op het form kost echt heel veel tijd. Ik heb in meerdere forms problemen met databinding aan de combobox, dit is bij meerdere records enorm traag. Vandaar dat ik het nu aan het testen ben om sneller te maken. Heeft iemand nog een idee hoe ik dit kan versnellen?

Ik heb echt al heel veel gezocht op internet/fok, maar kom hier niet verder mee. Er staan af en toe wel wat 'oplossingen', maar bij mij wordt het nog niet sneller.
Hoe lang duurt het toevoegen bij jou dan? Ik heb je code even getest en de totale code duurt ongeveer 300 milliseconden. Voor een combobox met 10000 items vind ik dat niet extreem lang duren. De Me.Controls.Add(cmd) neemt wel de meeste tijd in beslag (ongeveer 270 milliseconden). Bij het toevoegen van de combobox wordt waarschijnlijk de datatable doorgelopen en voor elk item een comboboxitem aangemaakt. Met 10000 rijen duurt dit dus maar 0,027 milliseconden per item.

Je zal aan het toevoegen weinig kunnen optimaliseren lijkt mij. Je kan beter kijken hoe je de totale hoeveelheid items kan verminderen.

Note to self, eerst refreshen voor het typen van een antwoord 8)7 :P

Hail to the king baby!

Pagina: 1