ListView and dynamically loaded controls

8 posts, 1 answers
  1. Carsten Koster
    Carsten Koster avatar
    25 posts
    Member since:
    Sep 2006

    Posted 08 Aug 2010 Link to this post

    Hey Telerik-Team,
    i ran into a problem concerning the listview control and dynamically added controls. Here is what I am trying to achieve.

    I have a listview-control (LV) that is databound to a datatable. The LV also has a custom template
    set for its itemtemplate. This custom template dynamically loads another usercontrol containing a radgrid.
    So far so good. To facilitate the binding of postbackeventhandlers(click of a button) in this dynamically added control
    the control must be added at the init state of the surrounding page. So in the init event handler I call
    "Rebind" on the LV
    . The rebind causes the controls to be recreated and the event handler of the custom control, e.g.
    a linkbutton, is working.

    The problem is the following: After rebinding in the init handler, a second
    implicit rebind occurs
    , set at the prerender state, see below for the call stack:

        App_Code.zzxj7amw.dll!MotifListItemTemplate.InstantiateIn.AnonymousMethod__0(object sender = {System.Web.UI.WebControls.Panel}, System.EventArgs args = {System.EventArgs}) Line 45   C#
         System.Web.dll!System.Web.UI.Control.OnDataBinding(System.EventArgs e) + 0x5c bytes   
         ...
         Telerik.Web.UI.DLL!Telerik.Web.UI.RadListView.PerformSelect() + 0x32 bytes   
         Telerik.Web.UI.DLL!Telerik.Web.UI.RadListView.Rebind() + 0x28 bytes   
         Telerik.Web.UI.DLL!Telerik.Web.UI.RadListView.OnPreRender(System.EventArgs e = {System.EventArgs}) + 0x39 bytes   
         System.Web.dll!System.Web.UI.Control.PreRenderRecursiveInternal() + 0x68 bytes   
        
    This rebind forces the user controls to be created again, and I conclude that it also clears the LV's controls collection.
    This however flushes the viewstate so that any changes to the contained radgrid are lost (grouping, sorting, etc).

    Is there are way to get rid of this second rebind?

    I tried to call rebind in the load stage, which seems to keep the second rebind from happening, but the viewstate is lost due to the
    assumed clear of the controls collection.

    To sum up, I need to have a ListView Control that dynamically adds controls for each item it has, AND keeps track of the viewstate.

    I hope my explanations are clear.

    Thank you for your support!

    Regards,
    Kris
  2. Nikolay Rusev
    Admin
    Nikolay Rusev avatar
    2285 posts

    Posted 12 Aug 2010 Link to this post

    Hello Kris,

    I do not quite understand why you need to call Rebind on Init. If you take as base the following demo application:http://demos.telerik.com/aspnet-ajax/listview/examples/definingstructure/programmaticdefinition/defaultcs.aspx

    Templates will be loaded properly on Init then ViewState will be loaded properly, event for nested control inside the template and postback event should be triggered properly.

    All the best,
    Nikolay
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  3. UI for ASP.NET Ajax is Ready for VS 2017
  4. Carsten Koster
    Carsten Koster avatar
    25 posts
    Member since:
    Sep 2006

    Posted 12 Aug 2010 Link to this post

    Hi again,

    I need to call the rebind to make the grid reappear as proven in the attached example ASPX page.

    Thank you for your support,

    Regards,
    Kris

    ASPX:
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test_Viewstate.aspx.cs" Inherits="Test_Test_Viewstate" %>
     
    <%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
     
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
         
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <div>
        <asp:PlaceHolder runat="server" ID="pl"></asp:PlaceHolder>
            <telerik:RadListView ID="RadListView1" runat="server">
            </telerik:RadListView>
        </div>
        </form>
    </body>
    </html>

    CODE:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Configuration;
    using Telerik.Web.UI;
     
    public partial class Test_Test_Viewstate : System.Web.UI.Page
    {   
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            
            RadListView1.NeedDataSource += new EventHandler<RadListViewNeedDataSourceEventArgs>(RadListView1_NeedDataSource);
            GenericItemTemplate t = new GenericItemTemplate();
            t.NeedControl += new GenericItemTemplate.NeedControlHandler(t_NeedControl);
            RadListView1.ItemTemplate = t;
            // Else the listview will be empty after clicking a column to sort it
            //RadListView1.Rebind();
        }
     
        void RadListView1_NeedDataSource(object sender, RadListViewNeedDataSourceEventArgs e)
        {
            RadListView1.DataSource = new string[] {"test" };
        }
     
        void t_NeedControl(object sender, GenericItemTemplate.NeedControlArgs arg)
        {
            arg.View = (this.CreateDummyGrid());
        }
        
        protected void Page_Load(object sender, EventArgs e)
        {       
        }  
     
        private Control CreateDummyGrid()
        {
            Telerik.Web.UI.RadGrid myRadGrid = new Telerik.Web.UI.RadGrid();
            myRadGrid.ID = "PlacementGrid_";
            myRadGrid.NeedDataSource += new GridNeedDataSourceEventHandler(myRadGrid_NeedDataSource);
     
            myRadGrid.AutoGenerateColumns = true;
            myRadGrid.AllowPaging = false;
            myRadGrid.Visible = true;
            myRadGrid.AllowSorting = true;
            myRadGrid.AllowFilteringByColumn = true;
            myRadGrid.ShowStatusBar = true;
            myRadGrid.ShowFooter = true;
            myRadGrid.Width = new Unit("100%");
            myRadGrid.EnableViewState = true;
            myRadGrid.GroupingEnabled = true;
            myRadGrid.ShowGroupPanel = true;
            myRadGrid.ViewStateMode = System.Web.UI.ViewStateMode.Enabled;
            myRadGrid.ClientSettings.AllowDragToGroup = true;
            myRadGrid.ClientSettings.AllowExpandCollapse = true;
            myRadGrid.ClientSettings.Scrolling.AllowScroll = false;
            myRadGrid.MasterTableView.ShowGroupFooter = true;
            myRadGrid.MasterTableView.CommandItemDisplay = Telerik.Web.UI.GridCommandItemDisplay.None;
            myRadGrid.MasterTableView.CurrentResetPageIndexAction = Telerik.Web.UI.GridResetPageIndexAction.SetPageIndexToFirst;
            myRadGrid.MasterTableView.Frame = Telerik.Web.UI.GridTableFrame.Void;
            myRadGrid.MasterTableView.TableLayout = Telerik.Web.UI.GridTableLayout.Auto;
     
            myRadGrid.Rebind();
            return myRadGrid;
        }
        void myRadGrid_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
        {
            string[] dummyData = new string[] {"test1","test2","test3" };
            (source as Telerik.Web.UI.RadGrid).DataSource = dummyData;       
        }
    }


  5. Nikolay Rusev
    Admin
    Nikolay Rusev avatar
    2285 posts

    Posted 17 Aug 2010 Link to this post

    Hello Carsten,

    I have attached sample page demonstrating how to create RadGrid inside RadListView ItemTemplate and all works properly without need for extra rebinds.

    Regards,
    Nikolay
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  6. Carsten Koster
    Carsten Koster avatar
    25 posts
    Member since:
    Sep 2006

    Posted 21 Aug 2010 Link to this post

    Hi Nikolay,

    I just had time to test your suggestion. Unfortunately the problem remains! If you try to sort the "Value" column twice, it should go from desc to asc to no sorting. But in your example too, the order is: click, sorted desc, click not sorted, click, sorted desc.

    That are my findings, I am sorry but this does not fix my problem.

    Thank you for your time.

    Regards
    Kris
  7. Nikolay Rusev
    Admin
    Nikolay Rusev avatar
    2285 posts

    Posted 23 Aug 2010 Link to this post

    Hello Carsten,

    Seems like it is working properly on my end. Please check the attached video.

    Greetings,
    Nikolay
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  8. Carsten Koster
    Carsten Koster avatar
    25 posts
    Member since:
    Sep 2006

    Posted 23 Aug 2010 Link to this post

    Hello Nikolay,

    this is really getting more curious each time. Please see http://aim.advision-digital.de/test/telerik/test.aspx
    for a demonstration of the behavior I experience. I used the code you provided.
    I am using VS2010 and  version 2010.2.713.40 of your controls. Tested on a firefox 3.6.8 and iexplorer 8.

    Could there be a missing server configuration

    Thank you for your time,

    Regards,
    Kris
  9. Answer
    Nikolay Rusev
    Admin
    Nikolay Rusev avatar
    2285 posts

    Posted 25 Aug 2010 Link to this post

    Hello Carsten,

    I believe this is caused due to bug in RadListView that recently has been fixed. If you use 2.0 version of Telerik.Web.UI assembly you will experience correct behavior.

    I suggest you to download latest internal build or wait few days for SP1 of RadControls for ASP.NET AJAX where the fix will be officially released.

    All the best,
    Nikolay
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
Back to Top
UI for ASP.NET Ajax is Ready for VS 2017