This is a migrated thread and some comments may be shown as answers.

RadGrid DetailsTable , can not rebind

4 Answers 166 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Falcon Teng
Top achievements
Rank 1
Falcon Teng asked on 03 Sep 2009, 05:37 AM
Hi,
  I hava create a RadGrid to Bind something using DetailsTable , set the AutoGenerateColumns as true .
 It display well at first time , but when I Rebind the datasource(the columns is not as same as the first) , The Columns of DetailsTable don't change  .

The Code like below :

1.aspx:
    
    <div> 
        <asp:DropDownList ID="DropDownList1" runat="server" onselectedindexchanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true"
        <asp:ListItem Value="1" Text="MoreParams"></asp:ListItem> 
        <asp:ListItem Value="0" Text="LessParams" ></asp:ListItem> 
        </asp:DropDownList> 
        <rad:RadGrid ID="rgBug"  runat="server" AutoGenerateColumns="true" ondetailtabledatabind="rgBug_DetailTableDataBind" onneeddatasource="rgBug_NeedDataSource" > 
           <ClientSettings AllowExpandCollapse="true"></ClientSettings> 
            <MasterTableView  HierarchyDefaultExpanded="true" HierarchyLoadMode="Client"
                <DetailTables> 
                <rad:GridTableView  runat="server"></rad:GridTableView> 
                </DetailTables> 
            </MasterTableView> 
        </rad:RadGrid> 
    </div> 


2.cs:
    
   protected DataTable LessDataTable() 
        { 
            DataTable dt = new DataTable(); 
            DataColumn dc = new DataColumn(); 
            dc.Caption = "ID"
            dc.ColumnName = "ID"
            DataColumn dc2 = new DataColumn(); 
            dc2.Caption = "Name"
            dc2.ColumnName = "Name"
            dt.Columns.Add(dc); 
            dt.Columns.Add(dc2); 
 
            DataRow row = dt.NewRow(); 
            row[0] = 1; 
            row[1] = "Bruce Lee"; 
 
            dt.Rows.Add(row); 
            return dt; 
        } 
 
        protected DataTable MoreDataTable() 
        { 
            DataTable dt = new DataTable(); 
            DataColumn dc = new DataColumn(); 
            dc.Caption = "ID"
            dc.ColumnName = "ID"
            DataColumn dc2 = new DataColumn(); 
            dc2.Caption = "Name"
            dc2.ColumnName = "Name"
            DataColumn dc3new DataColumn(); 
            dc3.Caption = "Age"
            dc3.ColumnName = "Age"
            dt.Columns.Add(dc); 
            dt.Columns.Add(dc2); 
            dt.Columns.Add(dc3); 
 
            DataRow row = dt.NewRow(); 
            row[0] = 1; 
            row[1] = "Hyden Panetieer"; 
            row[2] = 23; 
 
            dt.Rows.Add(row); 
            return dt; 
        } 
 
        protected void rgBug_NeedDataSource(object source, Telerik.WebControls.GridNeedDataSourceEventArgs e) 
        { 
            if (DropDownList1.SelectedIndex != 0) 
                rgBug.DataSource = LessDataTable(); 
            else 
                rgBug.DataSource = MoreDataTable(); 
        } 
 
        protected void rgBug_DetailTableDataBind(object source, Telerik.WebControls.GridDetailTableDataBindEventArgs e) 
        { 
            if (DropDownList1.SelectedIndex != 0) 
                 e.DetailTableView.DataSource = LessDataTable(); 
            else 
                 e.DetailTableView.DataSource = MoreDataTable(); 
        } 
 
        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
        { 
            rgBug.Rebind(); 
        } 


========

The code is easy , but it cant do best for me
 





4 Answers, 1 is accepted

Sort by
0
Schlurk
Top achievements
Rank 2
answered on 03 Sep 2009, 09:02 PM
I haven't done much with the DetailTable, but have you tried to do this?

        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)  
        {  
            e.DetailTableView.Rebind();  
        }  

0
Falcon Teng
Top achievements
Rank 1
answered on 04 Sep 2009, 01:12 AM
e.DetailTableView.Rebind();

this method is not exist in the DropdownList event
and I can not run it in DetailTableDataBind event,this will occur error

0
Santiago Botero
Top achievements
Rank 1
answered on 28 Jan 2010, 08:49 AM
Hi, you can try this code (adapted to you) :

protected bool toLoadSettingsDetailTable=false
 
protected void RadGridTrip_DetailTableDataBind(object source, GridDetailTableDataBindEventArgs e) 
    {         
            GridDataItem parentItem = e.DetailTableView.ParentItem as GridDataItem; 
             
            toLoadSettingsDetailTable = true
            e.DetailTableView.DataSource = CreateDataDetailSource(parentItem["RT_ID"].Text); 
 
            e.DetailTableView.DataMember = "Detail"
        } 
         
    } 
 
protected void Page_LoadComplete(object sender, EventArgs e) 
    { 
            if (toLoadSettingsDetailTable) 
            { 
                for (var i = 0; i < RadGridTrip.MasterTableView.Items.Count;i++ ) 
                { 
                    if (RadGrid.MasterTableView.Items[i].Expanded) 
                    { 
                        RadGridTrip.MasterTableView.Items[i].Expanded = false
                        RadGridTrip.MasterTableView.Items[i].Expanded = true
                    } 
                } 
            } 
            toLoadSettingsDetailTable = false
         
    } 

ExpandCollapse will fire a Rebind() implicit.


0
Dheeraj
Top achievements
Rank 1
answered on 06 Sep 2011, 01:46 PM
Though this thread is very old but I am also facing the same problem. Can any one provide solution to this problem ?? It is urgent for me...
Tags
Grid
Asked by
Falcon Teng
Top achievements
Rank 1
Answers by
Schlurk
Top achievements
Rank 2
Falcon Teng
Top achievements
Rank 1
Santiago Botero
Top achievements
Rank 1
Dheeraj
Top achievements
Rank 1
Share this question
or