none
Problemas al agregar controles dinamicos? RRS feed

  • Pregunta

  • Saludos a todos, tengo este problema...

    Tengo un formulario donde cargo datos desde bd.. hacia controles estaticos y dinamicos ... todo va bien ahi... el problema es que si yo quiero agregar nuevos controles(dinamicos)... al agregarlos estos borran a los anteriores controles dinamicos que se habian cargado con datos ... quisiera saber si existe la posibilidad de que los nuevos controles que quiero añadir.. se puedan agregar sin borrar los datos de mis controles dinamicos o si es posible que de los controles dinamicos creados se puedan agregar sin perder los controles  datos cargados.. mayor explicacion esta en la imagen..

    codigo

    vb.net

               

    Public sub loaddata()   
         '''DATOS CARGADOS EN LOS CONTROLES ESTATICOS'''''''''         
    Dim selectSQL6 As String
                selectSQL6 = "select * from opp.tbldetallefichaprogra where numeActi='6' "
                Dim cmd6 As New SqlCommand(selectSQL6, con)
                Dim olector6 As SqlDataReader
                con.Open()

                olector6 = cmd6.ExecuteReader()
                olector6.Read()

                desc6.Text = olector6("descripActi").ToString
                fini6.Text = olector6("fechaIniActi").ToString
                ffin6.Text = olector6("fechaFinActi").ToString

                olector6.Close()
                con.Close()


                ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ''''DATOS CARGADOS EN LOS CONTROLES DINAMICOS
                Dim selectSQL7 As String
                selectSQL7 = "select * from opp.tbldetallefichaprogra where numeActi in (select top 6 numeActi from opp.tbldetallefichaprogra order by numeActi desc) "

                Dim cmd7 As New SqlCommand(selectSQL7, con)
                Dim olector7 As SqlDataReader

                con.Open()
                olector7 = cmd7.ExecuteReader()

                Dim dataSource As New List(Of RowData)
                Dim I = 1

                While olector7.Read()

                    dataSource.Add(New RowData() With {.Seq = I, .descrip = olector7("descripActi").ToString, .fechaini = olector7("fechaIniActi").ToString, .fechafin = olector7("fechaFinActi").ToString})

                    I = I + 1

                End While

                olector7.Close()
                con.Close()


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

               ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
           End If

        End Sub

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

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

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

    Muchas gracias a todos.

    sábado, 7 de marzo de 2015 18:35

Respuestas

  • Ojo, fíjate en que estás haciendo un New List(Of Rowdata) y luego añadiéndolo al rpt.DataSource. Evidentemente, esto borra todo lo que tenías antes cargado. Lo que tienes que hacer es recuperar el mismo List que tenías antes ya cargado con datos (y no un New List) y hacerle el .Add a ese List.

    Si el sub LoadData y el btnagregar_Click forman parte del mismo postback, entonces basta con que saques la variable dataSource a una variable miembro del Form (en lugar de declararla dentro de los dos métodos), y que le hagas el New únicamente desde el LoadData pero no en el btnAgregar_Click.

    En cambio, si el LoadData se ejecuta solo una vez durante la carga inicial del formulario, y luego quieres pulsar repetidamente el btnAgregar para añadir más datos, entonces tendrás que preservar el List durante los postbacks usando cualquiera de los mecanismos de conservación del estado (recomiendo el ViewState).


    domingo, 8 de marzo de 2015 7:33