Maintaining the look of dynamically added usercontrols

Discussion in 'ASP .Net' started by Nathan Sokalski, Jun 16, 2007.

  1. I have a page which I dynamically add several usercontrols (*.ascx files) to
    using the following code:


    Public Sub Refresh()
    For Each section As DataRow In Me.GetSections().Rows
    CType(Me.FindControl("admin" & CStr(section("buttontext")).Replace(" ",
    "")), adminsection2).RefreshSection()
    Next
    End Sub

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As
    System.EventArgs) Handles Me.Load
    Dim sections As DataTable = Me.GetSections()
    For Each section As DataRow In sections.Rows
    Me.AddAdminSection(CStr(section("buttontext")))
    Next
    Me.Refresh()
    End Sub

    Private Function GetSections() As DataTable
    Dim sections As New DataTable
    Dim dataadapterSelect As New OleDbDataAdapter("SELECT buttontext FROM
    subnavigation WHERE buttontext<>'More.' AND category='" &
    Request.QueryString("category") & "' ORDER BY buttonorder",
    System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    dataadapterSelect.Fill(sections)
    Return sections
    End Function

    Private Sub AddAdminSection(ByVal section As String)
    Dim admin As adminsection2 =
    CType(Page.LoadControl("~/usercontrols/adminsection2.ascx"), adminsection2)
    admin.ID = "admin" & section.Replace(" ", "")
    admin.Section = section
    Me.form1.Controls.Add(admin)
    End Sub


    My problem is that the controls are reloaded every time, as you can see from
    the Load event. If I place the following line

    Me.AddAdminSection(CStr(section("buttontext")))

    in an If Not Me.IsPostBack() statement, then it is only loaded the first
    time and I recieve an object does not exist error every time the Refresh()
    method is called (which is reasonably often, because this is for an
    administration page where the user edits DB records). What can I do to
    maintain the look of the dynamically added controls (in other words, how can
    I avoid replacing them with every postback)? If there is any other code you
    need to see that might help, let me know. Thanks.
    --
    Nathan Sokalski

    http://www.nathansokalski.com/
     
    Nathan Sokalski, Jun 16, 2007
    #1
    1. Advertising

  2. Nathan Sokalski

    Masudur Guest

    On Jun 16, 10:53 am, "Nathan Sokalski" <> wrote:
    > I have a page which I dynamically add several usercontrols (*.ascx files) to
    > using the following code:
    >
    > Public Sub Refresh()
    > For Each section As DataRow In Me.GetSections().Rows
    > CType(Me.FindControl("admin" & CStr(section("buttontext")).Replace(" ",
    > "")), adminsection2).RefreshSection()
    > Next
    > End Sub
    >
    > Protected Sub Page_Load(ByVal sender As Object, ByVal e As
    > System.EventArgs) Handles Me.Load
    > Dim sections As DataTable = Me.GetSections()
    > For Each section As DataRow In sections.Rows
    > Me.AddAdminSection(CStr(section("buttontext")))
    > Next
    > Me.Refresh()
    > End Sub
    >
    > Private Function GetSections() As DataTable
    > Dim sections As New DataTable
    > Dim dataadapterSelect As New OleDbDataAdapter("SELECT buttontext FROM
    > subnavigation WHERE buttontext<>'More.' AND category='" &
    > Request.QueryString("category") & "' ORDER BY buttonorder",
    > System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    > dataadapterSelect.Fill(sections)
    > Return sections
    > End Function
    >
    > Private Sub AddAdminSection(ByVal section As String)
    > Dim admin As adminsection2 =
    > CType(Page.LoadControl("~/usercontrols/adminsection2.ascx"), adminsection2)
    > admin.ID = "admin" & section.Replace(" ", "")
    > admin.Section = section
    > Me.form1.Controls.Add(admin)
    > End Sub
    >
    > My problem is that the controls are reloaded every time, as you can see from
    > the Load event. If I place the following line
    >
    > Me.AddAdminSection(CStr(section("buttontext")))
    >
    > in an If Not Me.IsPostBack() statement, then it is only loaded the first
    > time and I recieve an object does not exist error every time the Refresh()
    > method is called (which is reasonably often, because this is for an
    > administration page where the user edits DB records). What can I do to
    > maintain the look of the dynamically added controls (in other words, how can
    > I avoid replacing them with every postback)? If there is any other code you
    > need to see that might help, let me know. Thanks.
    > --
    > Nathan Sokalski
    > ://www.nathansokalski.com/


    Hi,

    Dynamically loaded controls need to be load after each post back...
    other wise dynamically loaded control's event wont work...
    Its always a good practice to load the controls in page_init event

    Thanks
    Masudur
     
    Masudur, Jun 16, 2007
    #2
    1. Advertising

  3. Isn't there any kind of workaround? I am sure that I am not the first person
    to want to maintain the properties of dynamically loaded usercontrols
    between postbacks. Anybody have any ideas? Thanks.
    --
    Nathan Sokalski

    http://www.nathansokalski.com/

    "Masudur" <> wrote in message
    news:...
    > On Jun 16, 10:53 am, "Nathan Sokalski" <> wrote:
    >> I have a page which I dynamically add several usercontrols (*.ascx files)
    >> to
    >> using the following code:
    >>
    >> Public Sub Refresh()
    >> For Each section As DataRow In Me.GetSections().Rows
    >> CType(Me.FindControl("admin" & CStr(section("buttontext")).Replace("
    >> ",
    >> "")), adminsection2).RefreshSection()
    >> Next
    >> End Sub
    >>
    >> Protected Sub Page_Load(ByVal sender As Object, ByVal e As
    >> System.EventArgs) Handles Me.Load
    >> Dim sections As DataTable = Me.GetSections()
    >> For Each section As DataRow In sections.Rows
    >> Me.AddAdminSection(CStr(section("buttontext")))
    >> Next
    >> Me.Refresh()
    >> End Sub
    >>
    >> Private Function GetSections() As DataTable
    >> Dim sections As New DataTable
    >> Dim dataadapterSelect As New OleDbDataAdapter("SELECT buttontext FROM
    >> subnavigation WHERE buttontext<>'More.' AND category='" &
    >> Request.QueryString("category") & "' ORDER BY buttonorder",
    >> System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    >> dataadapterSelect.Fill(sections)
    >> Return sections
    >> End Function
    >>
    >> Private Sub AddAdminSection(ByVal section As String)
    >> Dim admin As adminsection2 =
    >> CType(Page.LoadControl("~/usercontrols/adminsection2.ascx"),
    >> adminsection2)
    >> admin.ID = "admin" & section.Replace(" ", "")
    >> admin.Section = section
    >> Me.form1.Controls.Add(admin)
    >> End Sub
    >>
    >> My problem is that the controls are reloaded every time, as you can see
    >> from
    >> the Load event. If I place the following line
    >>
    >> Me.AddAdminSection(CStr(section("buttontext")))
    >>
    >> in an If Not Me.IsPostBack() statement, then it is only loaded the first
    >> time and I recieve an object does not exist error every time the
    >> Refresh()
    >> method is called (which is reasonably often, because this is for an
    >> administration page where the user edits DB records). What can I do to
    >> maintain the look of the dynamically added controls (in other words, how
    >> can
    >> I avoid replacing them with every postback)? If there is any other code
    >> you
    >> need to see that might help, let me know. Thanks.
    >> --
    >> Nathan Sokalski
    >> ://www.nathansokalski.com/

    >
    > Hi,
    >
    > Dynamically loaded controls need to be load after each post back...
    > other wise dynamically loaded control's event wont work...
    > Its always a good practice to load the controls in page_init event
    >
    > Thanks
    > Masudur
    >
     
    Nathan Sokalski, Jun 17, 2007
    #3
  4. Nathan,

    Probably Ajax, however I am seriously curious what a usercontrol for ASPNET
    has to do with ADONET.

    Cor

    "Nathan Sokalski" <> schreef in bericht
    news:...
    > Isn't there any kind of workaround? I am sure that I am not the first
    > person to want to maintain the properties of dynamically loaded
    > usercontrols between postbacks. Anybody have any ideas? Thanks.
    > --
    > Nathan Sokalski
    >
    > http://www.nathansokalski.com/
    >
    > "Masudur" <> wrote in message
    > news:...
    >> On Jun 16, 10:53 am, "Nathan Sokalski" <> wrote:
    >>> I have a page which I dynamically add several usercontrols (*.ascx
    >>> files) to
    >>> using the following code:
    >>>
    >>> Public Sub Refresh()
    >>> For Each section As DataRow In Me.GetSections().Rows
    >>> CType(Me.FindControl("admin" & CStr(section("buttontext")).Replace("
    >>> ",
    >>> "")), adminsection2).RefreshSection()
    >>> Next
    >>> End Sub
    >>>
    >>> Protected Sub Page_Load(ByVal sender As Object, ByVal e As
    >>> System.EventArgs) Handles Me.Load
    >>> Dim sections As DataTable = Me.GetSections()
    >>> For Each section As DataRow In sections.Rows
    >>> Me.AddAdminSection(CStr(section("buttontext")))
    >>> Next
    >>> Me.Refresh()
    >>> End Sub
    >>>
    >>> Private Function GetSections() As DataTable
    >>> Dim sections As New DataTable
    >>> Dim dataadapterSelect As New OleDbDataAdapter("SELECT buttontext FROM
    >>> subnavigation WHERE buttontext<>'More.' AND category='" &
    >>> Request.QueryString("category") & "' ORDER BY buttonorder",
    >>> System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    >>> dataadapterSelect.Fill(sections)
    >>> Return sections
    >>> End Function
    >>>
    >>> Private Sub AddAdminSection(ByVal section As String)
    >>> Dim admin As adminsection2 =
    >>> CType(Page.LoadControl("~/usercontrols/adminsection2.ascx"),
    >>> adminsection2)
    >>> admin.ID = "admin" & section.Replace(" ", "")
    >>> admin.Section = section
    >>> Me.form1.Controls.Add(admin)
    >>> End Sub
    >>>
    >>> My problem is that the controls are reloaded every time, as you can see
    >>> from
    >>> the Load event. If I place the following line
    >>>
    >>> Me.AddAdminSection(CStr(section("buttontext")))
    >>>
    >>> in an If Not Me.IsPostBack() statement, then it is only loaded the first
    >>> time and I recieve an object does not exist error every time the
    >>> Refresh()
    >>> method is called (which is reasonably often, because this is for an
    >>> administration page where the user edits DB records). What can I do to
    >>> maintain the look of the dynamically added controls (in other words, how
    >>> can
    >>> I avoid replacing them with every postback)? If there is any other code
    >>> you
    >>> need to see that might help, let me know. Thanks.
    >>> --
    >>> Nathan Sokalski
    >>> ://www.nathansokalski.com/

    >>
    >> Hi,
    >>
    >> Dynamically loaded controls need to be load after each post back...
    >> other wise dynamically loaded control's event wont work...
    >> Its always a good practice to load the controls in page_init event
    >>
    >> Thanks
    >> Masudur
    >>

    >
    >
     
    Cor Ligthert [MVP], Jun 18, 2007
    #4
  5. Nathan Sokalski

    Miha Markic Guest

    "Nathan Sokalski" <> wrote in message
    news:...
    > Isn't there any kind of workaround? I am sure that I am not the first
    > person to want to maintain the properties of dynamically loaded
    > usercontrols between postbacks. Anybody have any ideas? Thanks.


    You have to load dynamically added controls each time. Their properties are
    mantained as with static controls.
    --
    Miha Markic [MVP C#, INETA Country Leader for Slovenia]
    RightHand .NET consulting & development www.rthand.com
    Blog: http://cs.rthand.com/blogs/blog_with_righthand/
     
    Miha Markic, Jun 18, 2007
    #5
  6. The dynamically added usercontrols that I want to maintain the look of
    contain AJAX, and the reason for the postbacks is to update the data
    accessed using ADO.NET, so there are your relations to AJAX and ADO.NET. The
    main tags in the usercontrol are the following:

    <asp:panel>
    <asp:Label/>
    </asp:panel>
    <asp:panel>
    <asp:DataList>
    </asp:DataList>
    </asp:panel>
    <AJAX:CollapsiblePanelExtender/>

    (obviously the controls all have their properties, and the DataList has it's
    ItemTemplate and EditItemTemplate). The property that I am having trouble
    maintaining is the Collapsed property of the CollapsiblePanelExtender
    control. The postbacks are usually caused by eventbubbling through Button
    controls in the DataList. I haven't tried it yet, but one idea I thought
    about was to put the DataList inside an UpdatePanel. The only concerns I had
    with this idea were:

    1. In some cases, a record is moved from the DataSource of one DataList to
    the DataSource of another DataList. This would mean I would still need a way
    to update all the DataLists regardless. Any ideas to make this possibility
    work?

    2. There is one section that on the page (not in the usercontrols, but on
    the page that contains the usercontrols) that is used to add records,
    obviously causing a postback. This would cause pretty much the same
    situation as Concern #1, and would probably be solved in a similar way. Any
    ideas for this?

    The code I currently use to update the usercontrols is the following. The
    *.ascx.vb file contains the following method, which is called for all of the
    usercontrols from a method in the containing page (I removed the
    OleDbDataAdapter's SQL to keep the code short in the posting):

    Public Sub RefreshSection()
    Dim sectiontable As New DataTable
    Dim sectionadapter As New OleDbDataAdapter("",
    ConfigurationManager.AppSettings("connectionstring"))
    sectionadapter.Fill(sectiontable)
    Me.datSection.DataSource = sectiontable
    Me.datSection.DataBind()
    End Sub

    Do any of these ideas or information help give a way to solve my problem?
    Thanks.
    --
    Nathan Sokalski

    http://www.nathansokalski.com/

    "Cor Ligthert [MVP]" <> wrote in message
    news:%...
    > Nathan,
    >
    > Probably Ajax, however I am seriously curious what a usercontrol for
    > ASPNET has to do with ADONET.
    >
    > Cor
    >
    > "Nathan Sokalski" <> schreef in bericht
    > news:...
    >> Isn't there any kind of workaround? I am sure that I am not the first
    >> person to want to maintain the properties of dynamically loaded
    >> usercontrols between postbacks. Anybody have any ideas? Thanks.
    >> --
    >> Nathan Sokalski
    >>
    >> http://www.nathansokalski.com/
    >>
    >> "Masudur" <> wrote in message
    >> news:...
    >>> On Jun 16, 10:53 am, "Nathan Sokalski" <> wrote:
    >>>> I have a page which I dynamically add several usercontrols (*.ascx
    >>>> files) to
    >>>> using the following code:
    >>>>
    >>>> Public Sub Refresh()
    >>>> For Each section As DataRow In Me.GetSections().Rows
    >>>> CType(Me.FindControl("admin" & CStr(section("buttontext")).Replace("
    >>>> ",
    >>>> "")), adminsection2).RefreshSection()
    >>>> Next
    >>>> End Sub
    >>>>
    >>>> Protected Sub Page_Load(ByVal sender As Object, ByVal e As
    >>>> System.EventArgs) Handles Me.Load
    >>>> Dim sections As DataTable = Me.GetSections()
    >>>> For Each section As DataRow In sections.Rows
    >>>> Me.AddAdminSection(CStr(section("buttontext")))
    >>>> Next
    >>>> Me.Refresh()
    >>>> End Sub
    >>>>
    >>>> Private Function GetSections() As DataTable
    >>>> Dim sections As New DataTable
    >>>> Dim dataadapterSelect As New OleDbDataAdapter("SELECT buttontext FROM
    >>>> subnavigation WHERE buttontext<>'More.' AND category='" &
    >>>> Request.QueryString("category") & "' ORDER BY buttonorder",
    >>>> System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    >>>> dataadapterSelect.Fill(sections)
    >>>> Return sections
    >>>> End Function
    >>>>
    >>>> Private Sub AddAdminSection(ByVal section As String)
    >>>> Dim admin As adminsection2 =
    >>>> CType(Page.LoadControl("~/usercontrols/adminsection2.ascx"),
    >>>> adminsection2)
    >>>> admin.ID = "admin" & section.Replace(" ", "")
    >>>> admin.Section = section
    >>>> Me.form1.Controls.Add(admin)
    >>>> End Sub
    >>>>
    >>>> My problem is that the controls are reloaded every time, as you can see
    >>>> from
    >>>> the Load event. If I place the following line
    >>>>
    >>>> Me.AddAdminSection(CStr(section("buttontext")))
    >>>>
    >>>> in an If Not Me.IsPostBack() statement, then it is only loaded the
    >>>> first
    >>>> time and I recieve an object does not exist error every time the
    >>>> Refresh()
    >>>> method is called (which is reasonably often, because this is for an
    >>>> administration page where the user edits DB records). What can I do to
    >>>> maintain the look of the dynamically added controls (in other words,
    >>>> how can
    >>>> I avoid replacing them with every postback)? If there is any other code
    >>>> you
    >>>> need to see that might help, let me know. Thanks.
    >>>> --
    >>>> Nathan Sokalski
    >>>> ://www.nathansokalski.com/
    >>>
    >>> Hi,
    >>>
    >>> Dynamically loaded controls need to be load after each post back...
    >>> other wise dynamically loaded control's event wont work...
    >>> Its always a good practice to load the controls in page_init event
    >>>
    >>> Thanks
    >>> Masudur
    >>>

    >>
    >>

    >
    >
     
    Nathan Sokalski, Jun 18, 2007
    #6
  7. Nathan,

    We have used that on our VB-Tips website, however I have not enough time to
    get a nice sample from that. Why don't you make for your self a simple
    sample only containing your problem.

    You will find that you than find the solution.

    Cor

    "Nathan Sokalski" <> schreef in bericht
    news:%...
    > The dynamically added usercontrols that I want to maintain the look of
    > contain AJAX, and the reason for the postbacks is to update the data
    > accessed using ADO.NET, so there are your relations to AJAX and ADO.NET.
    > The main tags in the usercontrol are the following:
    >
    > <asp:panel>
    > <asp:Label/>
    > </asp:panel>
    > <asp:panel>
    > <asp:DataList>
    > </asp:DataList>
    > </asp:panel>
    > <AJAX:CollapsiblePanelExtender/>
    >
    > (obviously the controls all have their properties, and the DataList has
    > it's ItemTemplate and EditItemTemplate). The property that I am having
    > trouble maintaining is the Collapsed property of the
    > CollapsiblePanelExtender control. The postbacks are usually caused by
    > eventbubbling through Button controls in the DataList. I haven't tried it
    > yet, but one idea I thought about was to put the DataList inside an
    > UpdatePanel. The only concerns I had with this idea were:
    >
    > 1. In some cases, a record is moved from the DataSource of one DataList to
    > the DataSource of another DataList. This would mean I would still need a
    > way to update all the DataLists regardless. Any ideas to make this
    > possibility work?
    >
    > 2. There is one section that on the page (not in the usercontrols, but on
    > the page that contains the usercontrols) that is used to add records,
    > obviously causing a postback. This would cause pretty much the same
    > situation as Concern #1, and would probably be solved in a similar way.
    > Any ideas for this?
    >
    > The code I currently use to update the usercontrols is the following. The
    > *.ascx.vb file contains the following method, which is called for all of
    > the usercontrols from a method in the containing page (I removed the
    > OleDbDataAdapter's SQL to keep the code short in the posting):
    >
    > Public Sub RefreshSection()
    > Dim sectiontable As New DataTable
    > Dim sectionadapter As New OleDbDataAdapter("",
    > ConfigurationManager.AppSettings("connectionstring"))
    > sectionadapter.Fill(sectiontable)
    > Me.datSection.DataSource = sectiontable
    > Me.datSection.DataBind()
    > End Sub
    >
    > Do any of these ideas or information help give a way to solve my problem?
    > Thanks.
    > --
    > Nathan Sokalski
    >
    > http://www.nathansokalski.com/
    >
    > "Cor Ligthert [MVP]" <> wrote in message
    > news:%...
    >> Nathan,
    >>
    >> Probably Ajax, however I am seriously curious what a usercontrol for
    >> ASPNET has to do with ADONET.
    >>
    >> Cor
    >>
    >> "Nathan Sokalski" <> schreef in bericht
    >> news:...
    >>> Isn't there any kind of workaround? I am sure that I am not the first
    >>> person to want to maintain the properties of dynamically loaded
    >>> usercontrols between postbacks. Anybody have any ideas? Thanks.
    >>> --
    >>> Nathan Sokalski
    >>>
    >>> http://www.nathansokalski.com/
    >>>
    >>> "Masudur" <> wrote in message
    >>> news:...
    >>>> On Jun 16, 10:53 am, "Nathan Sokalski" <> wrote:
    >>>>> I have a page which I dynamically add several usercontrols (*.ascx
    >>>>> files) to
    >>>>> using the following code:
    >>>>>
    >>>>> Public Sub Refresh()
    >>>>> For Each section As DataRow In Me.GetSections().Rows
    >>>>> CType(Me.FindControl("admin" &
    >>>>> CStr(section("buttontext")).Replace(" ",
    >>>>> "")), adminsection2).RefreshSection()
    >>>>> Next
    >>>>> End Sub
    >>>>>
    >>>>> Protected Sub Page_Load(ByVal sender As Object, ByVal e As
    >>>>> System.EventArgs) Handles Me.Load
    >>>>> Dim sections As DataTable = Me.GetSections()
    >>>>> For Each section As DataRow In sections.Rows
    >>>>> Me.AddAdminSection(CStr(section("buttontext")))
    >>>>> Next
    >>>>> Me.Refresh()
    >>>>> End Sub
    >>>>>
    >>>>> Private Function GetSections() As DataTable
    >>>>> Dim sections As New DataTable
    >>>>> Dim dataadapterSelect As New OleDbDataAdapter("SELECT buttontext
    >>>>> FROM
    >>>>> subnavigation WHERE buttontext<>'More.' AND category='" &
    >>>>> Request.QueryString("category") & "' ORDER BY buttonorder",
    >>>>> System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    >>>>> dataadapterSelect.Fill(sections)
    >>>>> Return sections
    >>>>> End Function
    >>>>>
    >>>>> Private Sub AddAdminSection(ByVal section As String)
    >>>>> Dim admin As adminsection2 =
    >>>>> CType(Page.LoadControl("~/usercontrols/adminsection2.ascx"),
    >>>>> adminsection2)
    >>>>> admin.ID = "admin" & section.Replace(" ", "")
    >>>>> admin.Section = section
    >>>>> Me.form1.Controls.Add(admin)
    >>>>> End Sub
    >>>>>
    >>>>> My problem is that the controls are reloaded every time, as you can
    >>>>> see from
    >>>>> the Load event. If I place the following line
    >>>>>
    >>>>> Me.AddAdminSection(CStr(section("buttontext")))
    >>>>>
    >>>>> in an If Not Me.IsPostBack() statement, then it is only loaded the
    >>>>> first
    >>>>> time and I recieve an object does not exist error every time the
    >>>>> Refresh()
    >>>>> method is called (which is reasonably often, because this is for an
    >>>>> administration page where the user edits DB records). What can I do to
    >>>>> maintain the look of the dynamically added controls (in other words,
    >>>>> how can
    >>>>> I avoid replacing them with every postback)? If there is any other
    >>>>> code you
    >>>>> need to see that might help, let me know. Thanks.
    >>>>> --
    >>>>> Nathan Sokalski
    >>>>> ://www.nathansokalski.com/
    >>>>
    >>>> Hi,
    >>>>
    >>>> Dynamically loaded controls need to be load after each post back...
    >>>> other wise dynamically loaded control's event wont work...
    >>>> Its always a good practice to load the controls in page_init event
    >>>>
    >>>> Thanks
    >>>> Masudur
    >>>>
    >>>
    >>>

    >>
    >>

    >
    >
     
    Cor Ligthert [MVP], Jun 19, 2007
    #7
  8. If it was now friday I could make the sample.


    "Nathan Sokalski" <> schreef in bericht
    news:%...
    > The dynamically added usercontrols that I want to maintain the look of
    > contain AJAX, and the reason for the postbacks is to update the data
    > accessed using ADO.NET, so there are your relations to AJAX and ADO.NET.
    > The main tags in the usercontrol are the following:
    >
    > <asp:panel>
    > <asp:Label/>
    > </asp:panel>
    > <asp:panel>
    > <asp:DataList>
    > </asp:DataList>
    > </asp:panel>
    > <AJAX:CollapsiblePanelExtender/>
    >
    > (obviously the controls all have their properties, and the DataList has
    > it's ItemTemplate and EditItemTemplate). The property that I am having
    > trouble maintaining is the Collapsed property of the
    > CollapsiblePanelExtender control. The postbacks are usually caused by
    > eventbubbling through Button controls in the DataList. I haven't tried it
    > yet, but one idea I thought about was to put the DataList inside an
    > UpdatePanel. The only concerns I had with this idea were:
    >
    > 1. In some cases, a record is moved from the DataSource of one DataList to
    > the DataSource of another DataList. This would mean I would still need a
    > way to update all the DataLists regardless. Any ideas to make this
    > possibility work?
    >
    > 2. There is one section that on the page (not in the usercontrols, but on
    > the page that contains the usercontrols) that is used to add records,
    > obviously causing a postback. This would cause pretty much the same
    > situation as Concern #1, and would probably be solved in a similar way.
    > Any ideas for this?
    >
    > The code I currently use to update the usercontrols is the following. The
    > *.ascx.vb file contains the following method, which is called for all of
    > the usercontrols from a method in the containing page (I removed the
    > OleDbDataAdapter's SQL to keep the code short in the posting):
    >
    > Public Sub RefreshSection()
    > Dim sectiontable As New DataTable
    > Dim sectionadapter As New OleDbDataAdapter("",
    > ConfigurationManager.AppSettings("connectionstring"))
    > sectionadapter.Fill(sectiontable)
    > Me.datSection.DataSource = sectiontable
    > Me.datSection.DataBind()
    > End Sub
    >
    > Do any of these ideas or information help give a way to solve my problem?
    > Thanks.
    > --
    > Nathan Sokalski
    >
    > http://www.nathansokalski.com/
    >
    > "Cor Ligthert [MVP]" <> wrote in message
    > news:%...
    >> Nathan,
    >>
    >> Probably Ajax, however I am seriously curious what a usercontrol for
    >> ASPNET has to do with ADONET.
    >>
    >> Cor
    >>
    >> "Nathan Sokalski" <> schreef in bericht
    >> news:...
    >>> Isn't there any kind of workaround? I am sure that I am not the first
    >>> person to want to maintain the properties of dynamically loaded
    >>> usercontrols between postbacks. Anybody have any ideas? Thanks.
    >>> --
    >>> Nathan Sokalski
    >>>
    >>> http://www.nathansokalski.com/
    >>>
    >>> "Masudur" <> wrote in message
    >>> news:...
    >>>> On Jun 16, 10:53 am, "Nathan Sokalski" <> wrote:
    >>>>> I have a page which I dynamically add several usercontrols (*.ascx
    >>>>> files) to
    >>>>> using the following code:
    >>>>>
    >>>>> Public Sub Refresh()
    >>>>> For Each section As DataRow In Me.GetSections().Rows
    >>>>> CType(Me.FindControl("admin" &
    >>>>> CStr(section("buttontext")).Replace(" ",
    >>>>> "")), adminsection2).RefreshSection()
    >>>>> Next
    >>>>> End Sub
    >>>>>
    >>>>> Protected Sub Page_Load(ByVal sender As Object, ByVal e As
    >>>>> System.EventArgs) Handles Me.Load
    >>>>> Dim sections As DataTable = Me.GetSections()
    >>>>> For Each section As DataRow In sections.Rows
    >>>>> Me.AddAdminSection(CStr(section("buttontext")))
    >>>>> Next
    >>>>> Me.Refresh()
    >>>>> End Sub
    >>>>>
    >>>>> Private Function GetSections() As DataTable
    >>>>> Dim sections As New DataTable
    >>>>> Dim dataadapterSelect As New OleDbDataAdapter("SELECT buttontext
    >>>>> FROM
    >>>>> subnavigation WHERE buttontext<>'More.' AND category='" &
    >>>>> Request.QueryString("category") & "' ORDER BY buttonorder",
    >>>>> System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    >>>>> dataadapterSelect.Fill(sections)
    >>>>> Return sections
    >>>>> End Function
    >>>>>
    >>>>> Private Sub AddAdminSection(ByVal section As String)
    >>>>> Dim admin As adminsection2 =
    >>>>> CType(Page.LoadControl("~/usercontrols/adminsection2.ascx"),
    >>>>> adminsection2)
    >>>>> admin.ID = "admin" & section.Replace(" ", "")
    >>>>> admin.Section = section
    >>>>> Me.form1.Controls.Add(admin)
    >>>>> End Sub
    >>>>>
    >>>>> My problem is that the controls are reloaded every time, as you can
    >>>>> see from
    >>>>> the Load event. If I place the following line
    >>>>>
    >>>>> Me.AddAdminSection(CStr(section("buttontext")))
    >>>>>
    >>>>> in an If Not Me.IsPostBack() statement, then it is only loaded the
    >>>>> first
    >>>>> time and I recieve an object does not exist error every time the
    >>>>> Refresh()
    >>>>> method is called (which is reasonably often, because this is for an
    >>>>> administration page where the user edits DB records). What can I do to
    >>>>> maintain the look of the dynamically added controls (in other words,
    >>>>> how can
    >>>>> I avoid replacing them with every postback)? If there is any other
    >>>>> code you
    >>>>> need to see that might help, let me know. Thanks.
    >>>>> --
    >>>>> Nathan Sokalski
    >>>>> ://www.nathansokalski.com/
    >>>>
    >>>> Hi,
    >>>>
    >>>> Dynamically loaded controls need to be load after each post back...
    >>>> other wise dynamically loaded control's event wont work...
    >>>> Its always a good practice to load the controls in page_init event
    >>>>
    >>>> Thanks
    >>>> Masudur
    >>>>
    >>>
    >>>

    >>
    >>

    >
    >
     
    Cor Ligthert [MVP], Jun 19, 2007
    #8
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Jeffrey Todd
    Replies:
    1
    Views:
    4,174
    Peter Blum
    Jun 2, 2005
  2. JacekDr
    Replies:
    3
    Views:
    1,103
    Muhammad Naveed Yaseen
    Aug 26, 2007
  3. James Gerdes

    Events not firing on dynamically added UserControls

    James Gerdes, Sep 23, 2003, in forum: ASP .Net Building Controls
    Replies:
    1
    Views:
    291
    Victor Garcia Aprea [MVP]
    Sep 25, 2003
  4. Nathan Sokalski

    Maintaining the look of dynamically added usercontrols

    Nathan Sokalski, Jun 16, 2007, in forum: ASP .Net Building Controls
    Replies:
    7
    Views:
    766
    Cor Ligthert [MVP]
    Jun 19, 2007
  5. a
    Replies:
    1
    Views:
    208
    Teemu Keiski
    Nov 12, 2003
Loading...

Share This Page