Avatar billede karsten_larsen Praktikant
07. januar 2007 - 21:05 Der 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

?:-) karsten_larsen
Avatar billede thrytter Nybegynder
07. januar 2007 - 21:19 #1
Skal lige have præciseret, hvad du mener med "dynamisk genereret repeater"
Avatar billede karsten_larsen Praktikant
07. januar 2007 - 21:29 #2
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


        End If
Avatar billede karsten_larsen Praktikant
07. januar 2007 - 21:30 #3
Er det muligt at forbinde et specifik id til en repeater f.eks. UserId?
Avatar billede karsten_larsen Praktikant
07. januar 2007 - 21:35 #4
ahh - nu forstår jeg hvad du spurgte om "dynamisk genereret repeater"

<asp:SqlDataSource ID="dsTestName" runat="server"></asp:SqlDataSource>
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="dsTestName">

Er det muligt at binde de enkelte række til et specifikt ID, så "valg" ikke bare angiver nummer i rækken?
Avatar billede thrytter Nybegynder
07. januar 2007 - 21:44 #5
Hvis det er samme DropDownList som i et tidligere spørgsmål, mangler du at angive Value - eks.

<asp:ListItem Value="1">1</asp:ListItem>
<asp:ListItem Value="2">2</asp:ListItem>
<asp:ListItem Value="3">3</asp:ListItem>

Løser sikkert ikke dit problem.

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.
Avatar billede karsten_larsen Praktikant
07. januar 2007 - 21:55 #6
Det er det samme som et tidligere spørgsmål.

Prøver lige at forklare det lidt bedre. Udgangspunktet er en database med følgende felter

ID[int], Navn[varchar], Active[bit]

Hvis Active er True vises Navn i repeatere.

I repeater kan der ud for hvert navn vælges et antal 1 - 3, hvor resultatet skal uploades i en anden database.

Så hvis Active er False for f.eks. 2 og 4 i database, hvordan får jeg den information med over.

Er det mere klart? Eller er der en anden metode som er bedre?
Avatar billede thrytter Nybegynder
07. januar 2007 - 22:17 #7
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.
Avatar billede karsten_larsen Praktikant
07. januar 2007 - 22:39 #8
okay - opdatering sker uden for repeater (er det en ulempe?)

Vil du lave et svar og mange tak for hjælpen

øh - hvordan fanger jeg lige den ekstra label med "Id"

:-) karsten_larsen
Avatar billede thrytter Nybegynder
07. januar 2007 - 22:47 #9
Kan ikke afgøre om det er en ulempe at opdatere udenfor repeateren - kommer lidt an på antal rækker.

Hvis du vil have en opdateringsknap i hver række kan den se sådan her ud:

<asp:Button id="Button1" Runat="server" CommandName="Opdater" CommandArgument='<%# Container.DataItem("Id")%>' Text="Opdater"></asp:Button>

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

      Me.lblMessage.Text += "Id= " & sId & "<br>"
      Me.lblMessage.Text += "Navn= " & sNavn & "<br>"
      Me.lblMessage.Text += "Value= " & sValue

      ' 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

    Me.lblMessage.Text += "Id= " & sId & "<br>"
    Me.lblMessage.Text += "Navn= " & sNavn & "<br>"
    Me.lblMessage.Text += "Value= " & sValue & "<br><br>"

    ' Eller kald opdaringsfunktion
  Next
End Sub

Den ekstra Label fanges på samme måde som de andre selvom Visible="False"
Avatar billede karsten_larsen Praktikant
07. januar 2007 - 23:01 #10
super - tak for hjaelpen
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