07. januar 2007 - 21:05Der er
9 kommentarer og 1 løsning
Fange værdi fra dropdownlist i repeater
Jeg har en dynamisk genereret repeater med dropdownlist. Værdier ad de enkelte rækker og dennes værdi i dropdownlisten ønsker jeg at finde.
Men jeg fanger ingen værdier:
Dim thisControl As Control = FindControl("DropDownList1") If Not (thisControl Is Nothing) Then Dim valg As RepeaterItem For Each valg In Repeater1.Items If CType(Repeater1.FindControl("DropDownList1"), DropDownList).SelectedItem.Value > 0 Then Label1.Text = valg.ToString Label2.Text = CType(Repeater1.FindControl("DropDownList1"), DropDownList).SelectedItem.Value End If Next End If
At jeg ikke kender antallet af rækker. Jeg er kommet lidt videre, men mangler stadig af få thiscontrol til at virke.
Dim thisControl As Control = Repeater1.FindControl("DropDownList1") If Not (thisControl Is Nothing) Then
Dim valg As RepeaterItem For Each valg In Repeater1.Items If CType(valg.FindControl("DropDownList1"), DropDownList).SelectedItem.Value > 0 Then Label1.Text = valg.ItemIndex.ToString Label2.Text = CType(valg.FindControl("DropDownList1"), DropDownList).SelectedItem.Value End If Next
Skulle lige være sikker på, at vi var enige om betegnelsen "dynamisk", da DataGrid's, DataList's, GridView's og Repeatere alle egentlig genereres dynamisk.
Hvis du vil skjule værdien (navnet) i Label1 kan det gøres ved at tilføje:
Visible='<%# Eval("Active")%>' eller Visible='<%# Container.DataItem("Active")%>'
så din Label1 kommer til at se sådan her ud: <asp:Label runat="server" ID="Label1" text='<%# Eval("Navn") %>' Visible='<%# Eval("Active")%>' /> eller <asp:Label runat="server" ID="Label1" text='<%# Container.DataItem("Navn") %>' Visible='<%# Container.DataItem("Active")%>' />
Har du en opdateringsknap i hver række eller en knap udenfor din repeater til opdatering?
Hvis opdatering sker med knap udenfor repeateren kan du indsætte en label med visible="false" og Text='<%# Bind("Id")%>' i hver række.
Ved tryk på knappen vil repeaterens eventhandler OnItemCommand blive kaldt, og Id'et sendes med som argumanent.
Eventhandleren kan se ud som:
Private Sub Repeater1_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles Repeater1.ItemCommand Dim sId As String Dim sNavn As String Dim sValue As String
Me.lblMessage.Text = ""
Select Case e.CommandName Case "Opdater" sId = e.CommandArgument sNavn = CType(e.Item.FindControl("lblNavn"), Label).Text sValue = CType(e.Item.FindControl("ddlStatus"), DropDownList).SelectedValue
' Eller kald opdateringsfunktion End Select End Sub
En enkelt opdateringsfunktion kan se ud som:
Private Sub btnTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTest.Click Dim sId As String Dim sNavn As String Dim sValue As String
Dim i As Integer
Me.lblMessage.Text = ""
For i = 0 To Me.Repeater1.Items.Count - 1 sId = CType(Me.Repeater1.Items(i).FindControl("lblId"), Label).Text sNavn = CType(Me.Repeater1.Items(i).FindControl("lblNavn"), Label).Text sValue = CType(Me.Repeater1.Items(i).FindControl("ddlStatus"), DropDownList).SelectedValue
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.