none
Index erroneo al crear textboxs dinamicos RRS feed

  • Pregunta

  • Creo mis textboxs dentro de un repeater...  Y dentro del template de mi textbox le asigno el index ... pero este index sale desordenado al agregar los textboxs dinamicos..... que cosas debo cambiar para que el index me salga en el orden correcto

    Les dejo mi codigo

        <asp:Repeater ID="rpt" runat="server">
                  <HeaderTemplate>
                      <table>
                  </HeaderTemplate>
                  <ItemTemplate>
                      <tr>
                     <td>  <asp:TextBox ID="TextBox111" runat="server" Text ='<%#Eval("index")%>'>
                      </asp:TextBox></td>
                          <td>
                              <asp:TextBox ID="txt" runat="server"></asp:TextBox>
                          </td>
                          <td>
                              <asp:TextBox ID="txt1" runat="server"></asp:TextBox>
                          </td>
                          <td>
                         <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                   <ajax:CalendarExtender ID="CalendarExtender1" runat="server"
              TargetControlID="TextBox1" Format="dd/MM/yyyy">
              </ajax:CalendarExtender>
                       
                          </td>
                       
                          </tr>
                  </ItemTemplate>
                  <FooterTemplate>
                      </table></FooterTemplate>
              </asp:Repeater>

    codigo vb.net

             Protected Sub btnCreate_Click(sender As Object, e As EventArgs) Handles btnCreate.Click
         Dim i as integer
            Dim dataSource As New List(Of RowData)

            For i As Integer = 1 To DropDownList1.SelectedValue - 1
                'Create object of RowData class
                Dim objrowdata = New RowData()
                'assign i value to Index
                objrowdata.Index = i
                dataSource.Add(objrowdata)
            Next

            dataSource.Add(New RowData() With {.Index = i})
            Me.rpt.DataSource = dataSource
            Me.rpt.DataBind()

        End Sub


    • Editado fredsale miércoles, 4 de marzo de 2015 23:18
    miércoles, 4 de marzo de 2015 23:17

Respuestas

  • es que deberias quitar el

    Dim objrowdata = New RowData()

    porque estas agregando dos instancias

    ----

    si revisas el ejemplo solo deje la linea

    dataSource.Add(New RowData() With {.Seq = i})

    unicamente

    sino en cada iteracion del for estarias agregando dos items

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    jueves, 5 de marzo de 2015 16:55

Todas las respuestas

  • hola

    para evitarque el index sea un secuencial define en la clase una propiedad con otro nombre, como ser Seq

    entonces usas

    For i As Integer = 1 To DropDownList1.SelectedValue - 1
                Dim objrowdata = New RowData()
                objrowdata.Seq = i
                dataSource.Add(objrowdata)
    Next

    y en el template de repeater

    <asp:TextBox ID="TextBox111" runat="server" Text ='<%#Eval("Seq")%>'></asp:TextBox>

    asi queda asegurado que es esa propiedad la que esta tomando

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 5 de marzo de 2015 1:13
  • Muchas gracias Leandro lo intente pero mi sigue saliendo este orden : además debería salir como primer registro de index el numero 1 no el 0.

    El código que ejecuto es este:

     Public Class RowData

            Public Property Seq() As Integer
                Get
                    Return m_Index
                End Get
                Set(value As Integer)
                    m_Index = value
                End Set
            End Property
            Private m_Index As Integer

        End Class
        Protected Sub btnCreate_Click(sender As Object, e As EventArgs) Handles btnCreate.Click

            Dim dataSource As New List(Of RowData)

            For i As Integer = 1 To DropDownList1.SelectedValue - 1
                Dim objrowdata = New RowData()
                     objrowdata.Seq = i
                dataSource.Add(objrowdata)
            Next

            dataSource.Add(New RowData() With {.Seq = i})

            Me.rpt.DataSource = dataSource
            Me.rpt.DataBind()
        End Sub


    • Editado fredsale jueves, 5 de marzo de 2015 4:40
    jueves, 5 de marzo de 2015 4:39
  • hola

    que hace esta linea

    dataSource.Add(New RowData() With {.Seq = i})

    por fuera del For ? porque quizas esa es la que genera el item con valor cero

    ----

    ademas si quieres generar tre items y comienzas en 1 no deberias restar un valor en el for cuando haces DropDownList1.SelectedValue - 1 sino usar directo

    For i As Integer = 1 To DropDownList1.SelectedValue
         dataSource.Add(New RowData() With {.Seq = i})
         dataSource.Add(objrowdata)
    Next


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 5 de marzo de 2015 11:48
  • Leandro al seguir tu recomendacion,ahora me doy cuenta que se duplica la cantidad de controles que se genera en el repeater....  

    y bueno el orden de index esta correcto pero sale duplicado

    Este el codigo

        Protected Sub btnCreate_Click(sender As Object, e As EventArgs) Handles btnCreate.Click
        
            Dim dataSource As New List(Of RowData)

            For i As Integer = 1 To DropDownList1.SelectedValue
         
                Dim objrowdata = New RowData()
                dataSource.Add(New RowData() With {.Seq = i})
                objrowdata.Seq = i
                dataSource.Add(objrowdata)
            Next

            Me.rpt.DataSource = dataSource
            Me.rpt.DataBind()

        End Sub

    jueves, 5 de marzo de 2015 16:09
  • es que deberias quitar el

    Dim objrowdata = New RowData()

    porque estas agregando dos instancias

    ----

    si revisas el ejemplo solo deje la linea

    dataSource.Add(New RowData() With {.Seq = i})

    unicamente

    sino en cada iteracion del for estarias agregando dos items

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    jueves, 5 de marzo de 2015 16:55
  • Tienes razon leandro me desespere mucho que no note que esa linea que me generaba otro textbox mas !

    muchas gracias por tu tiempo..

    jueves, 5 de marzo de 2015 17:06