JHej, Jag tycker du skall använda de i SQLDataSource inbyggda select-parametrarna med den "tidigare" dropdownen som källa för villkoret. Om jag inte missförstår det här så får du 123 följt av 123 igen..?! vb .net 1.1 men tror du kan lista ut vad denna codebehind gör ändå: Tackar för exemplet Östen! Det ser ut som det jag är ute efter, ska genast testa! Tack igen Östen! Det fungerar suveränt!Tom rad i DropDownList
Jag har ett problem med några DropDownListor...
Det är så att jag har fyra Listor som påverkar varandra, väljer man något i den första så filtreras resultatet i den andra och väljer man något i den andra filtreras den tredje osv. Vid varje val visas dessutom resultaten i en GridView.
(Detta är väl ett rätt så vanligt scenario så jag hoppas att ni förstår hur jag menar.)
Än så länge fungerar det bra, men när en lista laddas så är alltid den första raden vald och påverkar det som visas i min GridView!
Därför vill jag lägga till en "tom" rad typ "Välj..." eller liknande. Jag har testat att lägga till den manuellt med:
<code>
<asp:DropDownList ID="ByggdelList" runat="server" AutoPostBack="True" DataSourceID="ByggdelDataSource" DataTextField="ByggdelNr" DataValueField="ByggdelNr" AppendDataBoundItems="True" CssClass="SnurraList">
<asp:ListItem Value="">Välj...</asp:ListItem>
</asp:DropDownList>
</code>
Som ni ser så använder jag både AutoPostBack=True och AppendDataBoundItems="True", men då jag använder den metoden så händer det att Lista två till exempel inte laddas om, utan det som ska visas visas dubbelt upp!
Alltså ser det ut så här ungefär:
Välj...
1
2
3
1
2
3
När det skulle ha varit såhär:
Välj...
1
2
3
... märkligt, va!
Hittade någon kod där man kunde lägga till en rad i code-behind, men den fungerade inte särskilt bra, eller så förstog jag den bara inte :(
Tror ändå att den metoden hade fungerat om jag fick ett bättre exempel att arbeta med.
Tacksam för snabbt svar!
/SaraSv: Tom rad i DropDownList
Annars kan du kolla på CascadingDropDown:
http://atlas.asp.net/atlastoolkit/CascadingDropDown/CascadingDropDown.aspxSv: Tom rad i DropDownList
Om så är fallet så låter det som om du skulle behöve reset:a ditt dataset alt clear
dittdataset.Reset
alt
dittdataset.ClearSv:Tom rad i DropDownList
Private Sub droppis1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles droppis1.SelectedIndexChanged
If Not Me.droppis1.SelectedItem.Value = "-1" Then 'första droppisen <> "-1"
Dim lolist As New foo
lolist.loadlist
Me.droppis2.DataSource = lolist
Me.droppis2.DataTextField = "name"
Me.droppis2.DataValueField = "Categoryid"
Me.droppis2.DataBind()
Dim loitem As New ListItem
loitem.Text = "välj i listan"
loitem.Value = "-1"
loitem.Selected = True
Me.droppis2.Items.Insert(0, loitem)
End If
End Sub
du måste lägga till itemet efter databind eftersom databindet annars skriver över vad du nu har stoppat in i det du databinder
man kan skriva ihop det hela om man tycker det känns bättre - nåt i stil med
me.droppis2.items.insert(0,new listitem("välj i listan","-1")) om jag minns rätt :)
Sv: Tom rad i DropDownList
Per: Det är just det jag gör och det fungerar utmärkt förutom när jag lägger till en "tom" rad :(
Thomas: Jag funderade om jag skulle behöva göra just någonting sådant, men vet inte riktigt NÄR i händelserna detta måste göras.
Om inte Östens exempel fungerar får jag väl pröva med det.
Tack för svaren!Sv: Tom rad i DropDownList
Men eftersom jag redan har kopplat en datasource till min lista så behödes bara den sista halvan av koden:
Private Sub droppis1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles droppis1.SelectedIndexChanged
If Not Me.droppis1.SelectedItem.Value = "-1" Then 'första droppisen <> "-1"
Me.droppis2.DataBind()
Dim loitem As New ListItem
loitem.Text = "välj i listan"
loitem.Value = "-1"
loitem.Selected = True
Me.droppis2.Items.Insert(0, loitem)
End If
End Sub