Hi,
I have a 3 level hierarchical grid.It is populated programatically (i.e. through 'DetailTableDataBind')
Each row in the middle-level grid has a hyperlink, which if pressed causes a dialog to be displayed (through RadWindowManager).
When the dialog is closed (by clicking 'Save'), the dialog closed, and calls a 'refreshGrid' function in the parent.
The 'refreshGrid' then does a 'ajaxRequest("RebindAndNavigate")'.
All pretty standard stuff, except it doesn't seem to refresh the contents of the 3rd level grid.
Am I missing something- does the rebind refresh all displayed 'programmatic-populated' children tables?
Cheers,
Steve
I have a 3 level hierarchical grid.It is populated programatically (i.e. through 'DetailTableDataBind')
Each row in the middle-level grid has a hyperlink, which if pressed causes a dialog to be displayed (through RadWindowManager).
When the dialog is closed (by clicking 'Save'), the dialog closed, and calls a 'refreshGrid' function in the parent.
The 'refreshGrid' then does a 'ajaxRequest("RebindAndNavigate")'.
All pretty standard stuff, except it doesn't seem to refresh the contents of the 3rd level grid.
Am I missing something- does the rebind refresh all displayed 'programmatic-populated' children tables?
Cheers,
Steve
3 Answers, 1 is accepted
0

Jayesh Goyani
Top achievements
Rank 2
answered on 30 Jun 2012, 10:37 AM
Hello Steve,
TelerikPage.aspx
TelerikPage.aspx.cs
TelerikPopup.aspx
TelerikPopup.aspx.cs
Thanks,
Jayesh Goyani
TelerikPage.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TelerikPage.aspx.cs" Inherits="TelerikPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
<
head
runat
=
"server"
>
<
title
></
title
>
<
telerik:RadCodeBlock
ID
=
"RadCodeBlock1"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
function openpopup(id, Parentid) {
var oWnd = radopen("TelerikPopup.aspx?id=" + id + "&Parentid=" + Parentid, "RadWindow1");
oWnd.show();
return false;
}
function OnClientClose(oWnd, args) {
var arg = args.get_argument();
if (arg) {
var ajaxManager = $find("<%= RadAjaxManager1.ClientID %>");
ajaxManager.ajaxRequest("RebindChild" +","+ arg);
}
}
</
script
>
</
telerik:RadCodeBlock
>
</
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
div
>
<
telerik:RadScriptManager
ID
=
"RadScriptManager1"
runat
=
"server"
>
</
telerik:RadScriptManager
>
<
telerik:RadWindowManager
ID
=
"RadWindowManager1"
runat
=
"server"
OnClientClose
=
"OnClientClose"
>
<
Windows
>
<
telerik:RadWindow
ID
=
"RadWindow1"
runat
=
"server"
OnClientClose
=
"OnClientClose"
>
</
telerik:RadWindow
>
</
Windows
>
</
telerik:RadWindowManager
>
<
telerik:RadAjaxManager
ID
=
"RadAjaxManager1"
runat
=
"server"
onajaxrequest
=
"RadAjaxManager1_AjaxRequest"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"RadAjaxManager1"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"RadGrid1"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManager
>
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
AutoGenerateColumns
=
"false"
OnNeedDataSource
=
"RadGrid1_NeedDataSource"
OnDetailTableDataBind
=
"RadGrid1_DetailTableDataBind"
OnItemDataBound
=
"RadGrid1_ItemDataBound"
>
<
MasterTableView
DataKeyNames
=
"ID"
HierarchyLoadMode
=
"Client"
>
<
Columns
>
<
telerik:GridBoundColumn
HeaderText
=
"ID"
DataField
=
"ID"
UniqueName
=
"ID"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Name"
DataField
=
"Name"
UniqueName
=
"Name"
>
</
telerik:GridBoundColumn
>
</
Columns
>
<
DetailTables
>
<
telerik:GridTableView
Name
=
"Child"
>
<
Columns
>
<
telerik:GridTemplateColumn
>
<
ItemTemplate
>
<
asp:LinkButton
ID
=
"lnk1"
runat
=
"server"
>open popup</
asp:LinkButton
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"ID"
DataField
=
"ID"
UniqueName
=
"ID"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Name"
DataField
=
"Name"
UniqueName
=
"Name"
>
</
telerik:GridBoundColumn
>
</
Columns
>
</
telerik:GridTableView
>
</
DetailTables
>
</
MasterTableView
>
</
telerik:RadGrid
>
</
div
>
</
form
>
</
body
>
</
html
>
TelerikPage.aspx.cs
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
Telerik.Web.UI;
public
partial
class
TelerikPage : System.Web.UI.Page
{
protected
void
Page_Load(
object
sender, EventArgs e)
{
}
protected
void
RadGrid1_NeedDataSource(
object
sender, GridNeedDataSourceEventArgs e)
{
dynamic data =
new
[] {
new
{ ID = 1, Name =
"Name1"
},
new
{ ID = 2, Name =
"Name2"
},
new
{ ID = 3, Name =
"Name3"
}
};
RadGrid1.DataSource = data;
}
protected
void
RadGrid1_DetailTableDataBind(
object
sender, GridDetailTableDataBindEventArgs e)
{
string
str = e.DetailTableView.ParentItem.GetDataKeyValue(
"ID"
).ToString();
string
strtemp =
string
.Empty;
if
(Session[
"CheckIsUpdate"
] !=
null
)
{
strtemp = Session[
"CheckIsUpdate"
].ToString();
}
dynamic data =
new
[] {
new
{ ID = 11, Name =
"Name11"
+strtemp},
new
{ ID = 22, Name =
"Name22"
+strtemp},
new
{ ID = 33, Name =
"Name33"
+strtemp}
};
e.DetailTableView.DataSource = data;
}
protected
void
RadGrid1_ItemDataBound(
object
sender, GridItemEventArgs e)
{
if
(e.Item
is
GridDataItem && e.Item.OwnerTableView.Name ==
"Child"
)
{
GridDataItem item = e.Item
as
GridDataItem;
LinkButton lnk1 = item.FindControl(
"lnk1"
)
as
LinkButton;
lnk1.Attributes.Add(
"onclick"
,
"return openpopup('"
+ item.GetDataKeyValue(
"ID"
) +
"','"
+ item.OwnerTableView.ParentItem.GetDataKeyValue(
"ID"
) +
"' );"
);
}
}
protected
void
RadAjaxManager1_AjaxRequest(
object
sender, AjaxRequestEventArgs e)
{
string
[] str = e.Argument.Split(
','
);
if
(str.Length == 2)
{
if
(str[0].ToString() ==
"RebindChild"
)
{
foreach
(GridDataItem item
in
RadGrid1.MasterTableView.Items)
{
if
(item.HasChildItems && item.GetDataKeyValue(
"ID"
).ToString() == str[1].ToString())
{
item.ChildItem.NestedTableViews[0].Rebind();
}
}
}
}
}
}
TelerikPopup.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TelerikPopup.aspx.cs" Inherits="TelerikPopup" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
<
head
runat
=
"server"
>
<
title
></
title
>
<
telerik:RadCodeBlock
ID
=
"RadCodeBlock1"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
function GetRadWindow() {
var oWindow = null;
if (window.radWindow) oWindow = window.radWindow;
else if (window.frameElement.radWindow) oWindow = window.frameElement.radWindow;
return oWindow;
}
function returnToParent() {
var oWnd = GetRadWindow();
var parentId = "<%= MyProperty %>";
oWnd.close(parentId);
}
</
script
>
</
telerik:RadCodeBlock
>
</
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
div
>
<
asp:Button
ID
=
"Button1"
runat
=
"server"
Text
=
"Save"
OnClientClick
=
"returnToParent(); return false;"
/>
</
div
>
</
form
>
</
body
>
</
html
>
TelerikPopup.aspx.cs
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
public
partial
class
TelerikPopup : System.Web.UI.Page
{
public
string
MyProperty
{
get
{
if
(Request.QueryString[
"Parentid"
] !=
null
)
{
return
Request.QueryString[
"Parentid"
].ToString();
}
else
{
return
string
.Empty;
}
}
}
protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(Request.QueryString[
"id"
] !=
null
)
{
Response.Write(Request.QueryString[
"id"
].ToString());
Session[
"CheckIsUpdate"
] =DateTime.Now;
}
}
}
Thanks,
Jayesh Goyani
0

Steve
Top achievements
Rank 1
answered on 02 Jul 2012, 02:58 PM
Jayesh, Hi,
Thanks for that.
How do I use RebindChild for the 3rd level in the hierarchy?
For example, the grid has
+ Level 1
+ Level 2
Level 3
A button at level 2 calls a dialog to be displayed.
When the dialog is closed, an extra record/row is added to Level 3. What I need is for the level 3 'child grid' to be refreshed.
Hope this makes sense!
Cheers,
Steve
Thanks for that.
How do I use RebindChild for the 3rd level in the hierarchy?
For example, the grid has
+ Level 1
+ Level 2
Level 3
A button at level 2 calls a dialog to be displayed.
When the dialog is closed, an extra record/row is added to Level 3. What I need is for the level 3 'child grid' to be refreshed.
Hope this makes sense!
Cheers,
Steve
0

Jayesh Goyani
Top achievements
Rank 2
answered on 03 Jul 2012, 06:18 AM
Hello Steve,
TelerikPopup.aspx
TelerikPopup.aspx.cs
TelerikPage.aspx
TelerikPage.aspx.cs
Thanks,
Jayesh Goyani
TelerikPopup.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TelerikPopup.aspx.cs" Inherits="TelerikPopup" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
<
head
runat
=
"server"
>
<
title
></
title
>
<
style
type
=
"text/css"
>
.chklstMaxwidth
{
height:100px;
overflow:scroll;
}
</
style
>
<
telerik:RadCodeBlock
ID
=
"RadCodeBlock1"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
function GetRadWindow() {
var oWindow = null;
if (window.radWindow) oWindow = window.radWindow;
else if (window.frameElement.radWindow) oWindow = window.frameElement.radWindow;
return oWindow;
}
function returnToParent() {
var oWnd = GetRadWindow();
var parentId = "<%= MyPropertyFirstParent %>" + "," + "<%= MyPropertySecondParent %>";
oWnd.close(parentId);
}
</
script
>
</
telerik:RadCodeBlock
>
</
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
div
>
<
asp:Button
ID
=
"Button1"
runat
=
"server"
Text
=
"Save"
OnClientClick
=
"returnToParent(); return false;"
/>
</
div
>
</
form
>
</
body
>
</
html
>
TelerikPopup.aspx.cs
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
public
partial
class
TelerikPopup : System.Web.UI.Page
{
public
string
MyPropertyFirstParent
{
get
{
if
(Request.QueryString[
"Parentid"
] !=
null
)
{
return
Request.QueryString[
"Parentid"
].ToString();
}
else
{
return
string
.Empty;
}
}
}
public
string
MyPropertySecondParent
{
get
{
if
(Request.QueryString[
"id"
] !=
null
)
{
return
Request.QueryString[
"id"
].ToString();
}
else
{
return
string
.Empty;
}
}
}
protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(Request.QueryString[
"id"
] !=
null
)
{
Response.Write(Request.QueryString[
"id"
].ToString());
Session[
"CheckIsUpdate"
] =DateTime.Now;
}
}
}
TelerikPage.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TelerikPage.aspx.cs" Inherits="TelerikPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
<
head
runat
=
"server"
>
<
title
></
title
>
<
telerik:RadCodeBlock
ID
=
"RadCodeBlock1"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
function openpopup(id, Parentid) {
var oWnd = radopen("TelerikPopup.aspx?id=" + id + "&Parentid=" + Parentid, "RadWindow1");
oWnd.show();
return false;
}
function OnClientClose(oWnd, args) {
var arg = args.get_argument();
if (arg) {
var ajaxManager = $find("<%= RadAjaxManager1.ClientID %>");
ajaxManager.ajaxRequest("RebindChild" + "," + arg);
}
}
</
script
>
</
telerik:RadCodeBlock
>
</
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
div
>
<
telerik:RadScriptManager
ID
=
"RadScriptManager1"
runat
=
"server"
>
</
telerik:RadScriptManager
>
<
telerik:RadWindowManager
ID
=
"RadWindowManager1"
runat
=
"server"
OnClientClose
=
"OnClientClose"
>
<
Windows
>
<
telerik:RadWindow
ID
=
"RadWindow1"
runat
=
"server"
OnClientClose
=
"OnClientClose"
>
</
telerik:RadWindow
>
</
Windows
>
</
telerik:RadWindowManager
>
<
telerik:RadAjaxManager
ID
=
"RadAjaxManager1"
runat
=
"server"
OnAjaxRequest
=
"RadAjaxManager1_AjaxRequest"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"RadAjaxManager1"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"RadGrid1"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManager
>
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
AutoGenerateColumns
=
"false"
OnNeedDataSource
=
"RadGrid1_NeedDataSource"
OnDetailTableDataBind
=
"RadGrid1_DetailTableDataBind"
OnItemDataBound
=
"RadGrid1_ItemDataBound"
>
<
MasterTableView
DataKeyNames
=
"ID"
HierarchyLoadMode
=
"Client"
>
<
Columns
>
<
telerik:GridBoundColumn
HeaderText
=
"ID"
DataField
=
"ID"
UniqueName
=
"ID"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Name"
DataField
=
"Name"
UniqueName
=
"Name"
>
</
telerik:GridBoundColumn
>
</
Columns
>
<
DetailTables
>
<
telerik:GridTableView
Name
=
"Child1"
DataKeyNames
=
"ID"
>
<
Columns
>
<
telerik:GridTemplateColumn
>
<
ItemTemplate
>
<
asp:LinkButton
ID
=
"lnk1"
runat
=
"server"
>open popup</
asp:LinkButton
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"ID"
DataField
=
"ID"
UniqueName
=
"ID"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Name"
DataField
=
"Name"
UniqueName
=
"Name"
>
</
telerik:GridBoundColumn
>
</
Columns
>
<
DetailTables
>
<
telerik:GridTableView
Name
=
"Child2"
>
<
Columns
>
<
telerik:GridBoundColumn
HeaderText
=
"ID"
DataField
=
"ID"
UniqueName
=
"ID"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Name"
DataField
=
"Name"
UniqueName
=
"Name"
>
</
telerik:GridBoundColumn
>
</
Columns
>
</
telerik:GridTableView
>
</
DetailTables
>
</
telerik:GridTableView
>
</
DetailTables
>
</
MasterTableView
>
</
telerik:RadGrid
>
<
br
/>
</
div
>
</
form
>
</
body
>
</
html
>
TelerikPage.aspx.cs
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
Telerik.Web.UI;
public
partial
class
TelerikPage : System.Web.UI.Page
{
protected
void
Page_Load(
object
sender, EventArgs e)
{
}
protected
void
RadGrid1_NeedDataSource(
object
sender, GridNeedDataSourceEventArgs e)
{
dynamic data =
new
[] {
new
{ ID = 1, Name =
"Name1"
},
new
{ ID = 2, Name =
"Name2"
},
new
{ ID = 3, Name =
"Name3"
}
};
RadGrid1.DataSource = data;
}
protected
void
RadGrid1_DetailTableDataBind(
object
sender, GridDetailTableDataBindEventArgs e)
{
if
(e.DetailTableView.Name ==
"Child1"
)
{
dynamic data =
new
[] {
new
{ ID = 11, Name =
"Name11"
},
new
{ ID = 22, Name =
"Name22"
},
new
{ ID = 33, Name =
"Name33"
}
};
e.DetailTableView.DataSource = data;
}
else
{
string
str = e.DetailTableView.ParentItem.GetDataKeyValue(
"ID"
).ToString();
string
strtemp =
string
.Empty;
if
(Session[
"CheckIsUpdate"
] !=
null
)
{
strtemp = Session[
"CheckIsUpdate"
].ToString();
}
dynamic data =
new
[] {
new
{ ID = 11, Name =
"Name111"
+strtemp},
new
{ ID = 22, Name =
"Name222"
+strtemp},
new
{ ID = 33, Name =
"Name333"
+strtemp}
};
e.DetailTableView.DataSource = data;
}
}
protected
void
RadGrid1_ItemDataBound(
object
sender, GridItemEventArgs e)
{
if
(e.Item
is
GridDataItem && e.Item.OwnerTableView.Name ==
"Child1"
)
{
GridDataItem item = e.Item
as
GridDataItem;
LinkButton lnk1 = item.FindControl(
"lnk1"
)
as
LinkButton;
lnk1.Attributes.Add(
"onclick"
,
"return openpopup('"
+ item.GetDataKeyValue(
"ID"
) +
"','"
+ item.OwnerTableView.ParentItem.GetDataKeyValue(
"ID"
) +
"' );"
);
}
}
protected
void
RadAjaxManager1_AjaxRequest(
object
sender, AjaxRequestEventArgs e)
{
string
[] str = e.Argument.Split(
','
);
if
(str.Length == 3)
{
if
(str[0].ToString() ==
"RebindChild"
)
{
foreach
(GridDataItem item
in
RadGrid1.MasterTableView.Items)
{
if
(item.HasChildItems && item.GetDataKeyValue(
"ID"
).ToString() == str[1].ToString())
{
foreach
(GridDataItem itemc1
in
item.ChildItem.NestedTableViews[0].Items)
{
if
(itemc1.GetDataKeyValue(
"ID"
).ToString() == str[2].ToString())
{
itemc1.ChildItem.NestedTableViews[0].Rebind();
}
}
}
}
}
}
}
}
Thanks,
Jayesh Goyani