Hi,
I have a hierarchical grid with tabs in it. First-time binding data to grid works fine but once I expand and collapse the row(s), the data belong to the row does not bind properly. I'm using programmatic data-binding.
and Here is code behind:
Please try collapsing and expanding "Target Language" level. All tabs grid will lose its data.
Any help will be greatly appreciated.
Thanks
I have a hierarchical grid with tabs in it. First-time binding data to grid works fine but once I expand and collapse the row(s), the data belong to the row does not bind properly. I'm using programmatic data-binding.
<
telerik:RadGrid
ID
=
"grdLevel1"
runat
=
"server"
AutoGenerateColumns
=
"false"
OnDetailTableDataBind
=
"grdLevel1_DetailTableDataBind"
OnItemDataBound
=
"grdLevel1_ItemDataBound"
OnItemCommand
=
"grdLevel1_ItemCommand"
OnItemCreated
=
"grdLevel1_ItemCreated"
OnNeedDataSource
=
"grdLevel1_NeedDataSource"
>
<
MasterTableView
DataKeyNames
=
"FldOrderID"
Name
=
"Orders"
HierarchyDefaultExpanded
=
"true"
>
<
NoRecordsTemplate
>
<
strong
>No Record Found.</
strong
>
</
NoRecordsTemplate
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"FldOrderID"
HeaderText
=
"OrderID"
UniqueName
=
"FldOrderID"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"FldOrderNumber"
HeaderText
=
"OrderNumber"
UniqueName
=
"FldOrderNumber"
>
</
telerik:GridBoundColumn
>
</
Columns
>
<
DetailTables
>
<
telerik:GridTableView
DataKeyNames
=
"FldOrderDetailID"
AutoGenerateColumns
=
"false"
Name
=
"OrderDetail"
HierarchyDefaultExpanded
=
"true"
>
<
Columns
>
<
telerik:GridBoundColumn
HeaderText
=
"Detail ID"
DataField
=
"FldOrderDetailID"
>
</
telerik:GridBoundColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Source Language"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"lblSourceLanguage"
runat
=
"server"
></
asp:Label
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
</
Columns
>
<
DetailTables
>
<
telerik:GridTableView
DataKeyNames
=
"FldOrderDetailLanguageID,FldOrderDetailID,FldTargetLanguageID"
Name
=
"TargetLanguages"
AutoGenerateColumns
=
"false"
HierarchyDefaultExpanded
=
"true"
>
<
Columns
>
<
telerik:GridTemplateColumn
HeaderText
=
"Target Language"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"lblTargetLang"
runat
=
"server"
></
asp:Label
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
</
Columns
>
<
DetailTables
>
<
telerik:GridTableView
DataKeyNames
=
"FldOrderDetailDocumentID"
AutoGenerateColumns
=
"false"
Name
=
"DetailDocuments"
HierarchyDefaultExpanded
=
"true"
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"FldOrderDetailDocumentID"
HeaderText
=
"FldOrderDetailDocumentID"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"FldDocumentName"
HeaderText
=
"DocumentName"
>
</
telerik:GridBoundColumn
>
</
Columns
>
<
NestedViewTemplate
>
<
asp:Panel
runat
=
"server"
ID
=
"InnerContainer"
Visible
=
"true"
>
<
telerik:RadTabStrip
runat
=
"server"
ID
=
"TabStip1"
MultiPageID
=
"Multipage1"
SelectedIndex
=
"0"
>
<
Tabs
>
<
telerik:RadTab
runat
=
"server"
Text
=
"Standard"
PageViewID
=
"PageView1"
>
</
telerik:RadTab
>
<
telerik:RadTab
runat
=
"server"
Text
=
"Normalized"
PageViewID
=
"PageView2"
>
</
telerik:RadTab
>
<
telerik:RadTab
runat
=
"server"
Text
=
"Blended"
PageViewID
=
"PageView3"
>
</
telerik:RadTab
>
<
telerik:RadTab
runat
=
"server"
Text
=
"Lowest"
PageViewID
=
"PageView4"
>
</
telerik:RadTab
>
</
Tabs
>
</
telerik:RadTabStrip
>
<
telerik:RadMultiPage
runat
=
"server"
ID
=
"Multipage1"
SelectedIndex
=
"0"
RenderSelectedPageOnly
=
"false"
>
<
telerik:RadPageView
runat
=
"server"
ID
=
"PageView1"
>
<
telerik:RadGrid
runat
=
"server"
ID
=
"grdStd"
ShowFooter
=
"false"
AutoGenerateColumns
=
"false"
OnItemCommand
=
"grdChild_ItemCommand"
OnNeedDataSource
=
"grdChild_NeedDataSource"
OnDetailTableDataBind
=
"grdLevel1_DetailTableDataBind"
>
<
MasterTableView
DataKeyNames
=
"FldServiceTypeID"
Name
=
"StdServiceType"
HierarchyDefaultExpanded
=
"true"
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"FldServiceTypeName"
HeaderText
=
"Service Type"
></
telerik:GridBoundColumn
>
</
Columns
>
<
DetailTables
>
<
telerik:GridTableView
Name
=
"StdServices"
DataKeyNames
=
"FldServiceID"
AutoGenerateColumns
=
"false"
EditMode
=
"InPlace"
>
<
Columns
>
<
telerik:GridEditCommandColumn
ButtonType
=
"ImageButton"
></
telerik:GridEditCommandColumn
>
<
telerik:GridBoundColumn
DataField
=
"FldServiceName"
HeaderText
=
"Service Name"
></
telerik:GridBoundColumn
>
</
Columns
>
</
telerik:GridTableView
>
</
DetailTables
>
</
MasterTableView
>
</
telerik:RadGrid
>
</
telerik:RadPageView
>
<
telerik:RadPageView
runat
=
"server"
ID
=
"PageView2"
>
<
telerik:RadGrid
runat
=
"server"
ID
=
"grdNormalized"
ShowFooter
=
"false"
AutoGenerateColumns
=
"false"
OnItemCommand
=
"grdChild_ItemCommand"
OnNeedDataSource
=
"grdChild_NeedDataSource"
OnDetailTableDataBind
=
"grdLevel1_DetailTableDataBind"
>
<
MasterTableView
DataKeyNames
=
"FldServiceTypeID"
Name
=
"NormalizedServiceType"
HierarchyDefaultExpanded
=
"true"
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"FldServiceTypeName"
HeaderText
=
"Service Type"
></
telerik:GridBoundColumn
>
</
Columns
>
<
DetailTables
>
<
telerik:GridTableView
Name
=
"NormalizedServices"
DataKeyNames
=
"FldServiceID"
AutoGenerateColumns
=
"false"
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"FldServiceName"
HeaderText
=
"Service Name"
></
telerik:GridBoundColumn
>
</
Columns
>
</
telerik:GridTableView
>
</
DetailTables
>
</
MasterTableView
>
</
telerik:RadGrid
>
</
telerik:RadPageView
>
<
telerik:RadPageView
runat
=
"server"
ID
=
"PageView3"
>
<
telerik:RadGrid
runat
=
"server"
ID
=
"grdBlended"
ShowFooter
=
"false"
AutoGenerateColumns
=
"false"
OnItemCommand
=
"grdChild_ItemCommand"
OnNeedDataSource
=
"grdChild_NeedDataSource"
OnDetailTableDataBind
=
"grdLevel1_DetailTableDataBind"
>
<
MasterTableView
DataKeyNames
=
"FldServiceTypeID"
Name
=
"BlendedServiceType"
HierarchyDefaultExpanded
=
"true"
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"FldServiceTypeName"
HeaderText
=
"Service Type"
></
telerik:GridBoundColumn
>
</
Columns
>
<
DetailTables
>
<
telerik:GridTableView
Name
=
"BlendedServices"
DataKeyNames
=
"FldServiceID"
AutoGenerateColumns
=
"false"
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"FldServiceName"
HeaderText
=
"Service Name"
></
telerik:GridBoundColumn
>
</
Columns
>
</
telerik:GridTableView
>
</
DetailTables
>
</
MasterTableView
>
</
telerik:RadGrid
>
</
telerik:RadPageView
>
<
telerik:RadPageView
runat
=
"server"
ID
=
"PageView4"
>
<
telerik:RadGrid
runat
=
"server"
ID
=
"grdLowest"
ShowFooter
=
"false"
AutoGenerateColumns
=
"false"
OnItemCommand
=
"grdChild_ItemCommand"
OnNeedDataSource
=
"grdChild_NeedDataSource"
OnDetailTableDataBind
=
"grdLevel1_DetailTableDataBind"
>
<
MasterTableView
DataKeyNames
=
"FldServiceTypeID"
Name
=
"LowestServiceType"
HierarchyDefaultExpanded
=
"true"
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"FldServiceTypeName"
HeaderText
=
"Service Type"
></
telerik:GridBoundColumn
>
</
Columns
>
<
DetailTables
>
<
telerik:GridTableView
Name
=
"LowestServices"
DataKeyNames
=
"FldServiceID"
AutoGenerateColumns
=
"false"
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"FldServiceName"
HeaderText
=
"Service Name"
></
telerik:GridBoundColumn
>
</
Columns
>
</
telerik:GridTableView
>
</
DetailTables
>
</
MasterTableView
>
</
telerik:RadGrid
>
</
telerik:RadPageView
>
</
telerik:RadMultiPage
>
</
asp:Panel
>
</
NestedViewTemplate
>
</
telerik:GridTableView
>
</
DetailTables
>
</
telerik:GridTableView
>
</
DetailTables
>
</
telerik:GridTableView
>
</
DetailTables
>
</
MasterTableView
>
</
telerik:RadGrid
>
and Here is code behind:
public partial class GridSamples_MultilevelWithCode : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
BindGridData();
}
private void BindGridData()
{
//throw new NotImplementedException();
//IQueryable<
tblOrderCharge
> objtblOrderCharges = tblOrderCharge.GetAllOrderCharges(Convert.ToInt32(Request.QueryString["OID"]));
IQueryable<
tblOrder
> objtblOrdes = tblOrder.GetEntity(Convert.ToInt32(Request.QueryString["OID"]));
grdLevel1.DataSource = objtblOrdes;
}
protected void grdChild_ItemDataBound(object sender, Telerik.Web.UI.GridItemEventArgs e)
{
if ((e.Item is GridDataItem) && e.Item.OwnerTableView.Name == "StdServiceType")
{
GridDataItem oitem = e.Item as GridDataItem;
tblServiceType otblServiceType = oitem.DataItem as tblServiceType;
//oitem.OwnerTableView.DetailTables[0].DataSource = tblService.GetByTypeID(Convert.ToInt32(oitem.GetDataKeyValue("FldServiceTypeID")));
}
if ((e.Item is GridDataItem) && e.Item.OwnerTableView.Name == "StdServices")
{
//GridDataItem oitem = e.Item as GridDataItem;
//tblService otblServices = oitem.DataItem as tblService;
////Bind all Template columns here
}
}
protected void grdChild_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
{
string innerGridName = e.Item.OwnerTableView.Name;
GridDataItem otm = e.Item.OwnerTableView.ParentItem;
switch (e.CommandName)
{
case "ExpandCollapse":
int serviceTypeID = Convert.ToInt32(e.Item.OwnerTableView.DataKeyValues[0]["FldServiceTypeID"]);
//e.Item.OwnerTableView.Rebind();
//e.Item.OwnerTableView.DetailTables[0].DataSource = tblService.GetByTypeID(serviceTypeID);
break;
case "Edit":
break;
}
if (innerGridName == "StdServiceType")
{
}
if (innerGridName == "StdServices")
{
}
}
protected void grdLevel1_ItemCreated(object sender, Telerik.Web.UI.GridItemEventArgs e)
{
if (e.Item is GridNestedViewItem && e.Item.OwnerTableView.Name == "DetailDocuments")
{
e.Item.FindControl("InnerContainer").Visible = ((GridNestedViewItem)e.Item).ParentItem.Expanded;
}
}
protected void grdLevel1_ItemDataBound(object sender, Telerik.Web.UI.GridItemEventArgs e)
{
if ((e.Item is GridDataItem) && e.Item.OwnerTableView.Name == "Orders")
{
}
if ((e.Item is GridDataItem) && e.Item.OwnerTableView.Name == "OrderDetail")
{
GridDataItem oItem = e.Item as GridDataItem;
if (oItem != null)
{
Label lblSourceLanguage = oItem.FindControl("lblSourceLanguage") as Label;
lblSourceLanguage.Text = tblLanguage.GetLanguage(((tblOrderDetail)oItem.DataItem).FldSourceLanguageID).FldLanguageName;
}
}
if ((e.Item is GridDataItem) && e.Item.OwnerTableView.Name == "DetailDocuments")
{
}
if ((e.Item is GridNestedViewItem) && e.Item.OwnerTableView.Name == "DetailDocuments")
{
GridDataItem otm = e.Item.OwnerTableView.ParentItem;
int documentId = 0;
if (e.Item.OwnerTableView.DataKeyValues.Count > 0)
documentId = Convert.ToInt32(e.Item.OwnerTableView.DataKeyValues[0]["FldOrderDetailDocumentID"]);
int targetLanguageId = 0;
if (otm != null)
targetLanguageId = Convert.ToInt32(otm.GetDataKeyValue("FldTargetLanguageID"));
RadGrid grdStd = e.Item.FindControl("grdStd") as RadGrid;
//grdStd.ItemDataBound += new GridItemEventHandler(grdChild_ItemDataBound);
//grdStd.DetailTableDataBind += new GridDetailTableDataBindEventHandler(grdLevel1_DetailTableDataBind);
//grdStd.ItemCommand += new GridCommandEventHandler(grdChild_ItemCommand);
grdStd.MasterTableView.DataSource = tblServiceType.GetServiceTypes(documentId, targetLanguageId);
RadGrid grdNormalized = e.Item.FindControl("grdNormalized") as RadGrid;
//grdNormalized.ItemDataBound += new GridItemEventHandler(grdChild_ItemDataBound);
//grdNormalized.DetailTableDataBind += new GridDetailTableDataBindEventHandler(grdLevel1_DetailTableDataBind);
//grdNormalized.ItemCommand += new GridCommandEventHandler(grdChild_ItemCommand);
grdNormalized.MasterTableView.DataSource = tblServiceType.GetServiceTypes(documentId, targetLanguageId);
RadGrid grdBlended = e.Item.FindControl("grdBlended") as RadGrid;
//grdBlended.ItemDataBound += new GridItemEventHandler(grdChild_ItemDataBound);
//grdBlended.DetailTableDataBind += new GridDetailTableDataBindEventHandler(grdLevel1_DetailTableDataBind);
grdBlended.MasterTableView.DataSource = tblServiceType.GetServiceTypes(documentId, targetLanguageId);
RadGrid grdLowest = e.Item.FindControl("grdLowest") as RadGrid;
//grdLowest.ItemDataBound += new GridItemEventHandler(grdChild_ItemDataBound);
//grdLowest.DetailTableDataBind += new GridDetailTableDataBindEventHandler(grdLevel1_DetailTableDataBind);
grdLowest.MasterTableView.DataSource = tblServiceType.GetServiceTypes(documentId, targetLanguageId);
e.Item.FindControl("InnerContainer").Visible = ((GridNestedViewItem)e.Item).ParentItem.Expanded;
}
if ((e.Item is GridDataItem) && e.Item.OwnerTableView.Name == "TargetLanguages")
{
GridDataItem oItem = e.Item as GridDataItem;
Label lblTargetLang = oItem.FindControl("lblTargetLang") as Label;
lblTargetLang.Text = ((tblOrderDetailLanguage)oItem.DataItem).tblLanguage.FldLanguageName;
}
}
protected void grdLevel1_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
{
if (e.Item.OwnerTableView.Name == "OrderDetail")
{
int orderId = Convert.ToInt32(((GridDataItem)e.Item).GetDataKeyValue("FldOrderID"));
e.Item.OwnerTableView.DataSource = tblOrderDetail.GetAllOrderDetails(orderId);
e.Item.OwnerTableView.HierarchyDefaultExpanded = true;
}
if (e.Item.OwnerTableView.Name == "TargetLanguages")
{
int orderDetId = Convert.ToInt32(((GridDataItem)e.Item).GetDataKeyValue("FldOrderDetailID"));
e.Item.OwnerTableView.DataSource = tblOrderDetailLanguage.GetTargetLanguages(orderDetId);
e.Item.OwnerTableView.HierarchyDefaultExpanded = true;
//int orderDetId = Convert.ToInt32(e.DetailTableView.ParentItem.GetDataKeyValue("FldOrderDetailID"));
//e.DetailTableView.DataSource = tblOrderDetailLanguage.GetTargetLanguages(orderDetId);
}
if (e.Item.OwnerTableView.Name == "DetailDocuments")
{
int tarLangId = Convert.ToInt32(e.Item.OwnerTableView.ParentItem.GetDataKeyValue("FldTargetLanguageID"));
int documentId = Convert.ToInt32(((GridDataItem)e.Item).GetDataKeyValue("FldOrderDetailDocumentID"));
int orderDetailId = Convert.ToInt32(e.Item.OwnerTableView.ParentItem.GetDataKeyValue("FldOrderDetailID"));
e.Item.OwnerTableView.DataSource = tblOrderDetailDocument.GetAllDetailDocuments(orderDetailId, tarLangId);
e.Item.OwnerTableView.HierarchyDefaultExpanded = true;
//e.Item.OwnerTableView.Rebind();
//GridDataItem otm = e.Item.OwnerTableView.ParentItem;
}
if (e.Item.OwnerTableView.Name == "StdServiceType")
{
}
if (e.Item.OwnerTableView.Name == "StdServices")
{
}
}
protected void grdLevel1_DetailTableDataBind(object sender, Telerik.Web.UI.GridDetailTableDataBindEventArgs e)
{
string detTableName = e.DetailTableView.Name;
int serviceTypeId = 0;
switch (detTableName)
{
case "Orders":
break;
case "OrderDetail":
//GridDataItem oItem = e.DetailTableView.ParentItem;
int orderId = Convert.ToInt32(e.DetailTableView.ParentItem.GetDataKeyValue("FldOrderID"));
e.DetailTableView.DataSource = tblOrderDetail.GetAllOrderDetails(orderId);
break;
case "TargetLanguages":
int orderDetId = Convert.ToInt32(e.DetailTableView.ParentItem.GetDataKeyValue("FldOrderDetailID"));
e.DetailTableView.DataSource = tblOrderDetailLanguage.GetTargetLanguages(orderDetId);
break;
case "DetailDocuments":
int orderDetailId = Convert.ToInt32(e.DetailTableView.ParentItem.GetDataKeyValue("FldOrderDetailID"));
int tarLangId = Convert.ToInt32(e.DetailTableView.ParentItem.GetDataKeyValue("FldTargetLanguageID"));
e.DetailTableView.DataSource = tblOrderDetailDocument.GetAllDetailDocuments(orderDetailId, tarLangId);
break;
case "StdServiceType":
//serviceTypeId = Convert.ToInt32(e.DetailTableView.ParentItem.GetDataKeyValue("FldServiceTypeID"));
//e.DetailTableView.DataSource = tblService.GetByTypeID(serviceTypeId);
break;
case "BlendedServices":
serviceTypeId = Convert.ToInt32(e.DetailTableView.ParentItem.GetDataKeyValue("FldServiceTypeID"));
e.DetailTableView.DataSource = tblService.GetByTypeID(serviceTypeId);
break;
case "NormalizedServices":
serviceTypeId = Convert.ToInt32(e.DetailTableView.ParentItem.GetDataKeyValue("FldServiceTypeID"));
e.DetailTableView.DataSource = tblService.GetByTypeID(serviceTypeId);
break;
case "StdServices":
serviceTypeId = Convert.ToInt32(e.DetailTableView.ParentItem.GetDataKeyValue("FldServiceTypeID"));
e.DetailTableView.DataSource = tblService.GetByTypeID(serviceTypeId);
break;
case "LowestServices":
serviceTypeId = Convert.ToInt32(e.DetailTableView.ParentItem.GetDataKeyValue("FldServiceTypeID"));
e.DetailTableView.DataSource = tblService.GetByTypeID(serviceTypeId);
break;
}
}
protected void grdChild_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
if (e.IsFromDetailTable)
{
RadGrid oMasterGrid = sender as RadGrid;
if (oMasterGrid != null)
{
int servTypeId = Convert.ToInt32(oMasterGrid.MasterTableView.DataKeyValues[0]["FldServiceTypeID"]);
oMasterGrid.MasterTableView.DataSource = tblService.GetByTypeID(servTypeId);
//oMasterGrid.MasterTableView.DetailTables[0].DataSource = tblService.GetByTypeID(servTypeId);
}
}
}
protected void grdLevel1_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
if (e.IsFromDetailTable)
{
RadGrid oMasterGrid = sender as RadGrid;
if (oMasterGrid != null)
{
switch (oMasterGrid.MasterTableView.Name)
{
case "Orders":
break;
case "OrderDetail":
//int orderId = 0;
//oMasterGrid.MasterTableView.DataSource = tblOrderDetail.GetAllOrderDetails(orderId);
break;
case "TargetLanguages":
break;
case "DetailDocuments":
break;
}
}
}
else
BindGridData();
}
}
Please try collapsing and expanding "Target Language" level. All tabs grid will lose its data.
Any help will be greatly appreciated.
Thanks