Jeg har en dropdownlist i et formview. Denne dropdownlist er bundet til et felt i databasen, og jeg har følgende problem:
Hvis værdien i databasen ikke eksisterer i dropdownlistens bundne tabel, får jeg fejlen: 'TitelDropDownList' har en SelectedValue, der er ugyldig, da den ikke findes på elementlisten.
Fremgangsmåden må være, at jeg i en event checker om værdien eksisterer, og hvis den ikke gør det, sættes selectedindex = -1.
Problemet er blot, at jeg ikke kan finde ud af hvilken event jeg skal bruge til det...
Min dropdown har en anden tabel som kilde til valgmulighederne, og hvis en post er blevet slettet i denne, og man herefter går ind på en post i hovedtabellen, som anvender den slettede værdi, så har vi balladen...
F. eks. er en person har fået titlen 'Sælger' og denne har værdien 5 i min titel-tabel. Herefter vil man rette i definitionerne, og sletter derfor 'Sælger' i titel-tabellen. Så åbnes bruger-tabellen igen, og heri er jo angivet 5 i feltet titel, men denne post eksisterer jo ikke længere i titel-tabellen...... så fejler siden.
Mit ønske i ovennævnte situation vil være, at der ikke er nogen værdi selected i min dropdownlist, altså første valgmulighed er valgt.
ja og nej, jeg får fejlen når siden åbnes, og jeg mener derfor ikke at jeg kan håndtere fejlen ved OnSelectedIndexChanged (fejlen er jo opstået inden jeg vælger noget i min dropdown)?
Som jeg forstår di spørgsmål så gør din side følgende:
Finder alle oplysninger om en bestemt person, de oplysninger indsætter den så i de tilhørende felter på siden. Titet feltet er en dropdown og når den prøver at sætte den rigtige værdi i denne og den ikke eksistere i din titel-tabel mere får du en fejl?
derfor skal du lave en try catch omkring den linie hvor du sætter "selectedindex"
Det går jo galt ved databinding - så eventet skal vel være OnDataBind eller OnDataBound. Men jeg håber, at du er klar over, at du er ved at lave en lappeløsning - den lapper en inkonsistents i DB'en som ikke burde være der i første omgang jo :)
Måden at vikle sig ud af dette her på, er IKKE at tillade at modificere titler, såfremt nogen har en sådan titel i din bruger tabel. Rækkefølgen skulle så være at modificere personens titel til noget andet, og når den titel som skal modificeres er fri af bindinger, SÅ slipper du for at lappe :)
Ja, jeg er 100% enig i at det ideologisk set burde rettes i databasen, men dette er temmeligt uoverskueligt idet jeg er ved at lave en brugerflade til en større database, hvor en bruger tidligere har rettet 'i hånden', så mit eksempel er blot 1 tabel/felt ud af måske 100.....
Begge events som nævnes kan ikke bruges, da siden fejler inden disse kører.
Er der nogen property man kan sætte, så den ikke kræver at posten eksisterer (det kan ikke passe at jeg er den eneste der er ude i dette problem) ?
Du skal ikke spegulere i events når det egår galt allerede når du loader siden.
Du har ikke svaret på om dette er det der sker på din side: Finder alle oplysninger om en bestemt person, de oplysninger indsætter den så i de tilhørende felter på siden. Titet feltet er en dropdown og når den prøver at sætte den rigtige værdi i denne og den ikke eksistere i din titel-tabel mere får du en fejl?
derfor skal du lave en try catch omkring den linie hvor du sætter "selectedindex"
Nå du har lavet det i design view, den er jeg ikke så skrap til, men jeg vil tro at du i din codebehind vil kunne håndtere det i RowCreatedDataBound. Så istedet for at sætte den parameter i din aspx side så validere du den i RowCreatedDataBound og sætter den der fra.
Det er klar sorry, tænkte lige på at du brugte et grid...
Jeg ved desværre ikke lige hvordan du kan håndtere den fejl på den måde du har bygget tingene op. Det mest rigtige vil jo stadig være at gøre som neoman skriver.
Hvis jeg får tid senere skal jeg nok prøve at kigge lidt på det igen.
Nu har jeg fjernet SelectedValue='<%# Bind("Titel") %>' så jeg ikke får fejlen når siden åbnes.
Herefter vil jeg i ddl_databound finde værdien og sætte denne, hvis den findes på listen.
Nu er jeg imidlertid stødt i et andet problem, for når jeg vil opdatere kan jeg ikke fange værdien i min dropdownlist i min updateparameter (den bruger min defaultvalue istedet vor valgt værdi).
Nu har jeg ændret min dropdownlist til en usercontrol, med en ste/get property.
Denne kan jeg styre/teste inden bindingen, og derfor fejlsøge om den relaterede post findes.
Noget af en omvej for et lille problem, men det virker !!
Synes godt om
Ny brugerNybegynder
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.