BobParr Skrevet 19. april 2006 Del Skrevet 19. april 2006 Jeg plages veldig med en dropdownliste jeg håper noen kanskje vet løsningen på. Problemet er at jeg har to listbox - dropdownlister, en hovedkategori og en underkategori: På overkategorien har jeg autopostback=true, og en event som kalles når det er gjort en endring her. Denne eventen kaller en metode som fyller underkategori listen på bakgrunn av hva som er valgt i den første listen. Problemet er at når jeg skal lagre det som er valgt i den andre listen får jeg alltid selectedindex = 1. Det virker som at uansett hva jeg gjør så bindes den andre dropdownlisten når jeg klikker lagre, noe som gjør at jeg ikke får med meg rett verdi. Altså lstSubCategoryExperience.SelectedItem.Text viser alltid det første elementet i listen Jeg forsøkte å ha en autopostback=true på den underkategori - dropdownlisten også, men det resulterte at når jeg gjorde et valg i denne boksen så nullstilles listen til å velge det øverste elementet. Jeg kan ikke se hvordan jeg skal hente ut rett verdi. Det ser ut til at den andre dropdownlisten bindes på nytt hver gang og dermed mister verdien som er valgt. Jeg legger ved den relevante koden så dere ser hva jeg sliter med. I aspx siden har jeg AutoEventWireup="false", mens de to dropdownboxene har AutoPostBack="True". Innspill her hadde vært fantastisk, begynner å se meg blind. Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If Not Page.IsPostBack Then GetMainResearchData() GetSubResearchData(0) lstMainCategory.Items.Insert(0, New ListItem("Please Select Main Category", "None")) lstMainCategory.SelectedIndex = 0 End If End Sub Private Sub lstMainCategory_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstMainCategory.SelectedIndexChanged mainKey = lstMainCategory.SelectedIndex() GetSubResearchData(mainKey) End Sub Private Sub lstSubCategory_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstSubCategory.SelectedIndexChanged subKey = lstSubCategory.SelectedIndex() ' HER ER VERDIEN ALLTID 1! Session("subid") = subKey End Sub Private Sub GetMainResearchData() Dim sqlText As String = "SELECT main_category_key, main_category_title FROM ntnu_main_category ORDER BY main_category_title" Dim myCommand As SqlCommand = New SqlCommand(sqlText, myConnection) Try myConnection.Open() myDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection) lstMainCategory.DataSource = myDataReader lstMainCategory.DataBind() Catch myException As Exception Response.Write("Feilmelding " & myException.ToString()) Finally If Not myDataReader Is Nothing Then myDataReader.Close() myConnection.Close() End If End Try End Sub Private Sub GetSubResearchData(ByVal mainCategory As Integer) Dim sqlText As String = "SELECT sub_category_key, sub_category_title FROM ntnu_sub_category WHERE ntnu_sub_category.sub_category_key = " & mainCategory & "" Dim myCommand As SqlCommand = New SqlCommand(sqlText, myConnection) Try myConnection.Open() myDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection) lstSubCategory.DataSource = myDataReader lstSubCategory.DataBind() lstSubCategory.Items.Insert(0, New ListItem("Please Select sub category", "None")) lstSubCategory.SelectedIndex = 0 Catch myException As Exception Response.Write("Feilmelding " & myException.ToString()) Finally If Not myDataReader Is Nothing Then myDataReader.Close() myConnection.Close() End If End Try End Sub Lenke til kommentar
j000rn Skrevet 19. april 2006 Del Skrevet 19. april 2006 Uten å ha testet ville jeg gjettet på at btnLagre_Click faktisk kjører FØR ddlSubCat_SelectedIndexChanged... prøv en rask fix: dim Save_Later as boolean = false function btnLagre_click... Save_Later = true end function function page_onprerender... if Save_Later = false return ' Lagre ting her...? end function Lenke til kommentar
oyvind_b Skrevet 19. april 2006 Del Skrevet 19. april 2006 Hmmm, skjønner ikke dette helt... Dersom du har AutoPostBack = False på sub-listen din vil SelectedIndexChanged-eventet bli kjørt FØR et Click-eventet på lagre-knappen. Derfor er det egentlig likegyldig (i dette enkle eksempelet) om du bruker AutoPostBack på sub-listen din eller ikke. På main-listen bør du jo selvsagt ha det. Skjønner heller ikke hvorfor den første listen din ble resatt da du brukte AutoPostBack på sub-listen din. Du har vel satt EnableViewState = True (default)? Bruker du session-variabelen til noe (Session("subid"))? Kanskje den ødelegger for deg? Øyvind Lenke til kommentar
BobParr Skrevet 19. april 2006 Forfatter Del Skrevet 19. april 2006 Takk for svar:) Skjønner heller ikke hvorfor den første listen din ble resatt da du brukte AutoPostBack på sub-listen din. Du har vel satt EnableViewState = True (default)? Den første listen resettes ikke etter postback. Kun den andre. Det jeg bruker sessions til var for å prøve manuelt å sette selectedIndex etter at den andre listen var gjort et valg på og det var gjort en postback. Jeg bruker ViewStateEnabled = "True" både på kontrollene det gjelder samt i Page direktivet. Skjønner ikke hva som kan skje her, selectedIndex resettes hele tiden til -1 som er ganske frustrerende. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå