Dynamic creation of UserControls - Problem with postback

Discussion in 'ASP .Net Building Controls' started by Roger, Jul 13, 2003.

  1. Roger

    Roger Guest

    I have created a UserControl, and I am dynamically adding
    it to each row of a datagrid with a sub called by the
    datagrid's 'OnItemDataBound'. That part works.

    'creates the instance of the control
    Dim ctl As MyCtl = CType(LoadControl("MyCtl.ascx"), MyCtl)
    'adds it to the datagrid inside a template column
    e.Item.Cells(1).Controls.Add(ctl )

    The problem is that the user control gone postback is
    performed. For instance, the user control has a button,
    and code handling the click event of that
    button. The code for the click never gets executed. The
    control is lost on postback.

    That can be fixed by performing the binding on the
    datagrid again, which triggers the dynamic creation of
    the control again, and the click even code is executed.
    The problem with that solution is that there is a
    database round trip, and the entire page is rendered
    again all to perform a simple click event.

    Any ideas? Is there different way to create the user
    controls, so they persist? How about a better way of
    doing what I need? I would just use item templates, but I
    need datagrids imbeded within rows of other datagrids. If
    you dynamically create a datagrid and add it to a cell of
    another grid, you dont have the ability to modify item
    templates of the dynamically created grid. (or am I wrong
    about that too).

    Any help appreciated,
    Roger
     
    Roger, Jul 13, 2003
    #1
    1. Advertisements

  2. Roger

    Roger Guest

    uh, sorry.. I butchered that 3rd paragraph pretty bad. I
    was cutting and pasting too much, and should have proof
    read. Here is the whole post again...

    I have created a UserControl, and I am dynamically adding
    it to each row of a datagrid with a sub called by the
    datagrid's 'OnItemDataBound'. That part works.

    'creates the instance of the control
    Dim ctl As MyCtl = CType(LoadControl("MyCtl.ascx"), MyCtl)
    'adds it to the datagrid inside a template column
    e.Item.Cells(1).Controls.Add(ctl )

    The problem is that the user control is gone once the
    postback is performed. For instance, the user control has
    a button, and code handling the click event of that
    button. The code for the click never gets executed. The
    control is lost on postback.

    That can be fixed by performing the binding on the
    datagrid again, which triggers the dynamic creation of
    the control again, and the click even code is executed.
    The problem with that solution is that there is a
    database round trip, and the entire page is rendered
    again all to perform a simple click event.

    Any ideas? Is there different way to create the user
    controls, so they persist? How about a better way of
    doing what I need? I would just use item templates, but I
    need datagrids imbeded within rows of other datagrids. If
    you dynamically create a datagrid and add it to a cell of
    another grid, you dont have the ability to modify item
    templates of the dynamically created grid. (or am I wrong
    about that too).

    Any help appreciated,
    Roger

    ..
     
    Roger, Jul 13, 2003
    #2
    1. Advertisements

  3. Roger

    Roger Guest

    Thanks, you were right. The other problem I had is that
    the user control was being fed by data from the
    datasource of the grid. I am using the OnItemCreated to
    call a sub that adds the user control to the datagrid.
    Next, I am using OnItemDataBound to call a sub that finds
    the user control and bind's it's controls to data from
    the datagrid. Works great. Now I am saving the round trip
    to the server.

    I am actually loading another datagrid into the first
    user control, and loading another control into that
    datagrid. Datagrid > loads user control with 2nd datagrid
    Thanks for your help.
     
    Roger, Jul 13, 2003
    #3
    1. Advertisements

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.