Avatar billede psteiness Nybegynder
13. september 2004 - 10:29 Der er 20 kommentarer og
1 løsning

Binding opdatering

Jeg binder et ArrayList til en række Combobox’s, vha. DataSource og DisplayMember. Men hvis jeg indsætter eller sletter et Objekt i ArrayListen. Så bliver Comboboxene ikke opdateret.
Jeg har prøvet med metoderne:
comboBox.Refresh();
comboBox.Update();
Men det virker ikke.
Avatar billede ladyhawke Novice
13. september 2004 - 10:37 #1
Er det windows eller ASP.NET du arbejder i?
Avatar billede psteiness Nybegynder
13. september 2004 - 10:45 #2
Windows
Avatar billede ladyhawke Novice
13. september 2004 - 10:52 #3
har du prøvet at opdatere selve databind'ingen? Det er jo ikke combo box'ene der ændrer sig fordi du sletter noget i ArrayList'en...
Avatar billede burningice Nybegynder
13. september 2004 - 10:57 #4
binder du direkte til din arraylist, eller bruger du DataBinding-metoden på comboboksen? Hvis det første er tilfældet, så bliver du nød til at sætte DataSource = ditArray igen når arrayet er opdateret.
Avatar billede ladyhawke Novice
13. september 2004 - 10:59 #5
Læg mærke til dette her (stammer fra MSDN):

Note  If you are bound to a data source that does not implement the IBindingList interface (such as an ArrayList object), the bound control's data will not be updated when the data source is updated. For example, if you have a combo box bound to an ArrayList object and data is added to the ArrayList, these new items will not appear in the combo box. However, you can force the combo box to be updated by calling the SuspendBinding and ResumeBinding methods on the instance of the BindingContext class to which the control is bound.
Avatar billede psteiness Nybegynder
13. september 2004 - 11:04 #6
har du et eks. med BindingContext class?
Ellers prøver jeg lige selv og lege lidt med det.
Avatar billede ladyhawke Novice
13. september 2004 - 11:15 #7
Jeg har kigget i msdn og fundet ovenstående, der står også en masse om binding context
Avatar billede psteiness Nybegynder
14. september 2004 - 01:59 #9
Desværre virker det ikke, med at sætte DataSource = ArrayListen igen.
Jeg har også prøvet det eks. fra MSDN, og det virker, når jeg sletter et objekt i ArrayListen. Men hvis jeg ændre i et objekt, så begynder den at bytte om på data. Fx navn fra et objekt og adresse fra et andet objekt. Det er som om bindingen går i opløsning?
Og så mister jeg desuden også sorteringen ved denne løsning.
Avatar billede ladyhawke Novice
14. september 2004 - 08:57 #10
Er det strengt nødvendigt at du bruger ArrayList? DataSet mm. har ikke samme problem...
Avatar billede psteiness Nybegynder
14. september 2004 - 09:00 #11
Er lige ved at prøve med et DataSet nu.
Avatar billede ladyhawke Novice
14. september 2004 - 09:07 #12
Det er lidt nemmere at arbejde med, men sig til hvis du mangler eksempler etc.
Avatar billede psteiness Nybegynder
14. september 2004 - 10:28 #13
Jeg ku godt bruge lidt hjælp til at binde ComboBoxene sammen.
De er alle bundet til det samme DataTable, med forskellige DisplayMember. Men de viser ikke samme DataRow..?
Avatar billede ladyhawke Novice
14. september 2004 - 10:50 #14
Der tror jeg du skal fange en event fra comboboxene når der ændres valg, eller et event som passer til din applikation, men de vil naturligvis ikke vise samme række automatisk, hvorfor ønsker du det? kunne du så ikke lige så godt ændre din display member så den viser alle informationer, i stedet for at dele det på flere comboboxe?
Avatar billede ladyhawke Novice
14. september 2004 - 11:00 #15
eller viser primær information i combo boxen og så resten i textboxe/labels?
Avatar billede psteiness Nybegynder
14. september 2004 - 11:12 #16
Nej; på denne måde:
ComboBox_1 viser navn.
ComboBox_2 viser adresse.
ComboBox_3 viser tlf.
Etc.
Så uanset hvilken ComboBox der ændres på, skal de andre følge med, og viser deres DisplayMember i den valgte DataRow.
Det mærkelige er; at de alle ændre sig, men det er ligesom tilfældigt hvilken DataRow de viser deres DisplayMember i….?
Avatar billede ladyhawke Novice
14. september 2004 - 12:52 #17
Jeg synes det er en lidt underlig måde at bruge en combobox på, men hvis du absolut ikke vil bruge én sammen med en visning af de relaterede informationer, så skal du nok fange selected index changed og så sætte alle boxe til den samme row, men det er nok ret besværligt.

Du bør dog være opmærksom på at den nuværende anvendelse af combo boxene kan være forvirrende ud fra en brugervenlighedsbetragtning. Hver box indikerer et muligt valg, men her ændrer alt sig når du vælger noget i én box (hvis jeg har forstået det rigtigt)
Avatar billede psteiness Nybegynder
14. september 2004 - 13:03 #18
Jeg forstår ikke helt, hvad du mener med ”en lidt underlig måde at bruge in combobox på”, hvordan skal man ellers bruge den, (havde jeg nær sagt ;-)).
Det er ligesom på krak.dk.
Når man finder navnet i navne-feltet, så forventer man, at adressen kommer i adresse-feltet, og omvendt.
Det er da brugervenlig, syndes du ik’?
Avatar billede ladyhawke Novice
14. september 2004 - 13:57 #19
krak har da kun en enkelt combobox i deres adresse søgning (vælg område). Resten er textbox'e, men prøv at kigge på den event jeg nævnte og find ud af hvilken control der sender den (det skal du vel vide for at vide hvilken række du skal finde). Ellers skal du måske ud i noget simpel databinding, men det er ogdå lidt noget bøvl...
Avatar billede psteiness Nybegynder
16. september 2004 - 10:54 #20
Nu har jeg fundet fejlen.
Efter at have Googlet mig frem til flere sider om dette problem, vidste det sig, at den sortering, der er i ComboBoxene ikke virker sammen med en Data Binding. Jeg støtte på flere sider, der løste problemet, ved at slå sorteringen fra i Comboboxene, (ComboBox.Sorted = false).
Og det virkede rent faktisk.
Men… eftersom hele ideen med applikationen var, at alle data skulle være sorteret, uanset hvad brugeren ønskede at søge på. Så var det ikke en løsning jeg kunne bruge til noget!
Jeg kontaktede derefter en Microsoft supporter i .NET Framework, og han bekræftede, at de godt kendte fejlen. Den måde de havde implementeret sorteringen i Comboboxene på, byttede ”desværre” rundt på indekseringen i Data Bindingen, dvs. at den ødelagde bindingen, så resultatet derefter var ret tilfældigt…Hmmm…
Han kunne ikke sige noget om, hvornår de fik rettet fejlen. (Han antydede nærmest, at de havde større problemer/fejl at rette på.)

Det ku være man skulle skifte platform igen, altså tilbage til Java, i stedet for at være betatester på .NET Framework…

Jeg har nu implementeret det på den gode gammeldags måde:

ComboBox_1.Items.AddRange(ArrayList.ToArray());
ComboBox_2.Items.AddRange(ArrayList.ToArray());
Etc.

Og fange herefter en IndexChanged event;

ComboBox_1.SelectedItem = ((ComboBox)sender).SelectedItem;
ComboBox_2.SelectedItem = ((ComboBox)sender).SelectedItem;
Etc.

Og det virker naturligvis ubeklagelig ;-). Og her virker sorteringen også…

Men, eftersom du ”Ladyhawke” gjorde et hæderligt forsøg på at hjælpe, får du alligevel de 60 point.

Tak for hjælpen.
Avatar billede ladyhawke Novice
16. september 2004 - 11:08 #21
Tak for points...

Der er en del fejl og mangler i .NET frameworket, men tro mig, du skal være glad for at det ikke er i Compact Framework du arbejder... Den er ca. en hel version bagud i forhold til det almindelige framework og det kan mærkes!

Uanset så et det jo åbenbart en uheldig fejl, men godt at du fik det løst. Det var så også selectedindexchanged du var nødt til at fange, men det er da godt at der findes flere måder at opnå det samme på... (ellers var programmering vist umulig)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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