Hello I looked at an example here on how nested view template is used to have multiple grids. I am currently working on a grid using nested view template and have few question. Before I start my question here is my code:
ASPX:
<telerik:RadGrid runat="server" ID="rgCommittee" GridLines="None" AllowSorting="true"
AllowPaging="true" AllowFilteringByColumn="true" PageSize="30" AutoGenerateColumns="false"
ShowGroupPanel="true" ShowFooter="true" OnNeedDataSource="rgCommittee_NeedDataSource"
OnItemDataBound="rgCommittee_ItemDataBound" OnItemCommand="rgCommittee_ItemCommand"
OnItemCreated="rgCommittee_ItemCreated">
<MasterTableView DataKeyNames="CommitteeID,CommitteeTypeID" AllowMultiColumnSorting="true"
GroupLoadMode="Server">
<NestedViewTemplate>
<asp:Panel ID="pnlMemberList" runat="server" Visible="true">
<telerik:RadGrid runat="server" ID="rgCommitteeMember" GridLines="None" AllowSorting="true"
AllowPaging="true" AllowFilteringByColumn="true" PageSize="30" AutoGenerateColumns="false"
ShowGroupPanel="true" ShowFooter="true" OnNeedDataSource="rgCommitteeMember_NeedDataSource"
OnItemCommand="rgCommitteeMember_ItemCommand" OnItemDataBound="rgCommitteeMember_ItemDataBound">
<ValidationSettings EnableValidation="true" ValidationGroup="vgGrid" />
<MasterTableView DataKeyNames="CommitteeMemberID,PersonID" HierarchyLoadMode="SeverOnDemand"
EditMode="InPlace" CommandItemDisplay="TopAndBottom" CommandItemSettings-AddNewRecordText="Add new committee member(s)">
<Columns>
<telerik:GridBoundColumn HeaderText="Member TypeID" AllowFiltering="true" DataField="CommitteeMemberID"
SortExpression="CommitteeMemberID" Visible="false" />
<telerik:GridEditCommandColumn ButtonType="LinkButton" UpdateText="Update" CancelText="Cancel"
EditText="Edit" />
<telerik:GridButtonColumn ButtonType="LinkButton" ConfirmText="Are you sure you want to delete this record?"
CommandName="Delete" Text="Delete" UniqueName="DeleteColumn" />
<telerik:GridTemplateColumn>
<EditItemTemplate>
<PersonSearch:GridPersonSearch ID="gpsMemberName" runat="server" SearchType="Employee" ReturnField="PersonID"
TwoColumnSearch="false" RequiredFlag="false" />
</EditItemTemplate>
<ItemTemplate>
<asp:Label runat="server" ID="lblEmpName" />
</ItemTemplate>
</telerik:GridTemplateColumn>
</Columns>
<NoRecordsTemplate>
<div>
There are no member(s) for this committee.</div>
</NoRecordsTemplate>
</MasterTableView>
</telerik:RadGrid>
</asp:Panel>
</NestedViewTemplate>
<Columns>
<telerik:GridBoundColumn HeaderText="Committee TypeID" AllowFiltering="true" DataField="CommitteeTypeID"
SortExpression="CommitteeTypeID" Visible="false" />
<telerik:GridBoundColumn HeaderText="Committee Type" AllowFiltering="true" DataField="CommitteeTypeName"
SortExpression="CommitteeTypeName" />
</Columns>
<NoRecordsTemplate>
<div>
There are no committee assigned to you.</div>
</NoRecordsTemplate>
</MasterTableView>
</telerik:RadGrid>
C# code:
protected void rgCommittee_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
rgCommittee.DataSource = Data.Committee.GetList(PersonID);
}
protected void rgCommittee_ItemDataBound(object source, GridItemEventArgs e)
{
GridDataItem gdiItem = e.Item as GridDataItem;
if (gdiItem == null)
{
return;
}
else
{
if(!gdiItem.IsInEditMode)
{
//if ((DataBinder.Eval(gdiItem.DataItem, "EmpName") == null) && (DataBinder.Eval(gdiItem.DataItem, "ChairFlag") == null))
//{
//}
}
}
}
protected void rgCommittee_ItemCommand(object source, GridCommandEventArgs e)
{
if (e.CommandName == RadGrid.ExpandCollapseCommandName)
{
((GridDataItem)e.Item).ChildItem.FindControl("pnlMemberList").Visible = !e.Item.Expanded;
}
}
protected void rgCommittee_ItemCreated(object source, GridItemEventArgs e)
{
if (e.Item is GridDataItem)
{
intCommitteeID = Convert.ToInt32(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["CommitteeID"].ToString());
}
if (e.Item is GridNestedViewItem)
{
e.Item.FindControl("pnlMemberList").Visible = ((GridNestedViewItem)e.Item).ParentItem.Expanded;
}
}
protected void rgCommitteeMember_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
RadGrid rgCommitteeMember = source as RadGrid;
rgCommitteeMember.DataSource = Data.CommitteeMember.GetList();
}
protected void rgCommitteeMember_ItemDataBound(object source, GridItemEventArgs e)
{
if (e.Item is GridDataInsertItem)
{
if (e.Item.IsInEditMode)
{
#region Declare Controls
UserControls.GridPersonSearch gpsMemberName = (UserControls.GridPersonSearch)e.Item.FindControl("gpsMemberName");
#endregion
#region Bind Controls
int intPersonID;
if (gpsMemberName != null && e.Item.ItemIndex != -1 &&
e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["PersonID"] != null &&
int.TryParse(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["PersonID"].ToString(), out intPersonID))
{
gpsMemberName.SetDropDownPersonID = intPersonID;
}
#endregion
}
}
else if (e.Item is GridDataItem)
{
#region Controls
if (!e.Item.IsInEditMode)
{
// view mode (Label controls)
((Label)e.Item.FindControl("lblEmpName")).Text = DataBinder.Eval(e.Item.DataItem, "EmpName") != null ? DataBinder.Eval(e.Item.DataItem, "EmpName").ToString() : string.Empty;
}
else
{
// edit mode
#region Declare Controls
//Committee Type un-editable column.
UserControls.GridPersonSearch gpsMemberName = (UserControls.GridPersonSearch)e.Item.FindControl("gpsMemberName");
#endregion
#region Bind Controls
int intPersonID;
if (gpsMemberName != null && e.Item.ItemIndex != -1 &&
e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["PersonID"] != null &&
int.TryParse(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["PersonID"].ToString(), out intPersonID))
{
gpsMemberName.SetDropDownPersonID = intPersonID;
}
#endregion
}
#endregion
}
}
protected void rgCommitteeMember_ItemCommand(object sender, GridCommandEventArgs e)
{
//int intRoleID;
GridDataItem gdiItem = e.Item as GridDataItem;
if (gdiItem == null)
{
return;
}
if (e.Item.IsInEditMode)
{
UserControls.GridPersonSearch gpsMemberName = (UserControls.GridPersonSearch)e.Item.FindControl("gpsMemberName");
switch (e.CommandName)
{
case "PerformInsert":
Page.Validate("vgGrid");
if (Page.IsValid)
{
}
else
{
rgCommitteeList.Controls.Add(new LiteralControl(string.Format("<span class=\"ErrorText\">There was an error inserting the record.</span>")));
}
break;
case "Update":
Page.Validate("vgGrid");
if (Page.IsValid)
{
}
else
{
rgCommitteeList.Controls.Add(new LiteralControl(string.Format("<span class=\"ErrorText\">There was an error updating the record.</span>")));
}
break;
}
}
}
The parent Grid displays Committee Name for example student committee. When I click on the student committee it loads the rad grid inside the nested view template that displays me the names of the student associated to that committee.
If there aren't any students for that committee it should display the message from no records template.
My questions are:
When the I call the child rad grid from the nested view template it does not display message from the no record template.
Secondly if there is data it does not display data either on the child grid.
But when I click the add button on the child rad grid it fires the NeedDataSource Event on the Child grid and displays the no records template message or displays student data then!
Can you please tell me how do I handle this, since after I click the committee name it should call the need data source event on child but it isn't doing that for some reason can you kindly let me know about it.
Thanks and Regards
Amitesh
ASPX:
<telerik:RadGrid runat="server" ID="rgCommittee" GridLines="None" AllowSorting="true"
AllowPaging="true" AllowFilteringByColumn="true" PageSize="30" AutoGenerateColumns="false"
ShowGroupPanel="true" ShowFooter="true" OnNeedDataSource="rgCommittee_NeedDataSource"
OnItemDataBound="rgCommittee_ItemDataBound" OnItemCommand="rgCommittee_ItemCommand"
OnItemCreated="rgCommittee_ItemCreated">
<MasterTableView DataKeyNames="CommitteeID,CommitteeTypeID" AllowMultiColumnSorting="true"
GroupLoadMode="Server">
<NestedViewTemplate>
<asp:Panel ID="pnlMemberList" runat="server" Visible="true">
<telerik:RadGrid runat="server" ID="rgCommitteeMember" GridLines="None" AllowSorting="true"
AllowPaging="true" AllowFilteringByColumn="true" PageSize="30" AutoGenerateColumns="false"
ShowGroupPanel="true" ShowFooter="true" OnNeedDataSource="rgCommitteeMember_NeedDataSource"
OnItemCommand="rgCommitteeMember_ItemCommand" OnItemDataBound="rgCommitteeMember_ItemDataBound">
<ValidationSettings EnableValidation="true" ValidationGroup="vgGrid" />
<MasterTableView DataKeyNames="CommitteeMemberID,PersonID" HierarchyLoadMode="SeverOnDemand"
EditMode="InPlace" CommandItemDisplay="TopAndBottom" CommandItemSettings-AddNewRecordText="Add new committee member(s)">
<Columns>
<telerik:GridBoundColumn HeaderText="Member TypeID" AllowFiltering="true" DataField="CommitteeMemberID"
SortExpression="CommitteeMemberID" Visible="false" />
<telerik:GridEditCommandColumn ButtonType="LinkButton" UpdateText="Update" CancelText="Cancel"
EditText="Edit" />
<telerik:GridButtonColumn ButtonType="LinkButton" ConfirmText="Are you sure you want to delete this record?"
CommandName="Delete" Text="Delete" UniqueName="DeleteColumn" />
<telerik:GridTemplateColumn>
<EditItemTemplate>
<PersonSearch:GridPersonSearch ID="gpsMemberName" runat="server" SearchType="Employee" ReturnField="PersonID"
TwoColumnSearch="false" RequiredFlag="false" />
</EditItemTemplate>
<ItemTemplate>
<asp:Label runat="server" ID="lblEmpName" />
</ItemTemplate>
</telerik:GridTemplateColumn>
</Columns>
<NoRecordsTemplate>
<div>
There are no member(s) for this committee.</div>
</NoRecordsTemplate>
</MasterTableView>
</telerik:RadGrid>
</asp:Panel>
</NestedViewTemplate>
<Columns>
<telerik:GridBoundColumn HeaderText="Committee TypeID" AllowFiltering="true" DataField="CommitteeTypeID"
SortExpression="CommitteeTypeID" Visible="false" />
<telerik:GridBoundColumn HeaderText="Committee Type" AllowFiltering="true" DataField="CommitteeTypeName"
SortExpression="CommitteeTypeName" />
</Columns>
<NoRecordsTemplate>
<div>
There are no committee assigned to you.</div>
</NoRecordsTemplate>
</MasterTableView>
</telerik:RadGrid>
C# code:
protected void rgCommittee_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
rgCommittee.DataSource = Data.Committee.GetList(PersonID);
}
protected void rgCommittee_ItemDataBound(object source, GridItemEventArgs e)
{
GridDataItem gdiItem = e.Item as GridDataItem;
if (gdiItem == null)
{
return;
}
else
{
if(!gdiItem.IsInEditMode)
{
//if ((DataBinder.Eval(gdiItem.DataItem, "EmpName") == null) && (DataBinder.Eval(gdiItem.DataItem, "ChairFlag") == null))
//{
//}
}
}
}
protected void rgCommittee_ItemCommand(object source, GridCommandEventArgs e)
{
if (e.CommandName == RadGrid.ExpandCollapseCommandName)
{
((GridDataItem)e.Item).ChildItem.FindControl("pnlMemberList").Visible = !e.Item.Expanded;
}
}
protected void rgCommittee_ItemCreated(object source, GridItemEventArgs e)
{
if (e.Item is GridDataItem)
{
intCommitteeID = Convert.ToInt32(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["CommitteeID"].ToString());
}
if (e.Item is GridNestedViewItem)
{
e.Item.FindControl("pnlMemberList").Visible = ((GridNestedViewItem)e.Item).ParentItem.Expanded;
}
}
protected void rgCommitteeMember_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
RadGrid rgCommitteeMember = source as RadGrid;
rgCommitteeMember.DataSource = Data.CommitteeMember.GetList();
}
protected void rgCommitteeMember_ItemDataBound(object source, GridItemEventArgs e)
{
if (e.Item is GridDataInsertItem)
{
if (e.Item.IsInEditMode)
{
#region Declare Controls
UserControls.GridPersonSearch gpsMemberName = (UserControls.GridPersonSearch)e.Item.FindControl("gpsMemberName");
#endregion
#region Bind Controls
int intPersonID;
if (gpsMemberName != null && e.Item.ItemIndex != -1 &&
e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["PersonID"] != null &&
int.TryParse(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["PersonID"].ToString(), out intPersonID))
{
gpsMemberName.SetDropDownPersonID = intPersonID;
}
#endregion
}
}
else if (e.Item is GridDataItem)
{
#region Controls
if (!e.Item.IsInEditMode)
{
// view mode (Label controls)
((Label)e.Item.FindControl("lblEmpName")).Text = DataBinder.Eval(e.Item.DataItem, "EmpName") != null ? DataBinder.Eval(e.Item.DataItem, "EmpName").ToString() : string.Empty;
}
else
{
// edit mode
#region Declare Controls
//Committee Type un-editable column.
UserControls.GridPersonSearch gpsMemberName = (UserControls.GridPersonSearch)e.Item.FindControl("gpsMemberName");
#endregion
#region Bind Controls
int intPersonID;
if (gpsMemberName != null && e.Item.ItemIndex != -1 &&
e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["PersonID"] != null &&
int.TryParse(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["PersonID"].ToString(), out intPersonID))
{
gpsMemberName.SetDropDownPersonID = intPersonID;
}
#endregion
}
#endregion
}
}
protected void rgCommitteeMember_ItemCommand(object sender, GridCommandEventArgs e)
{
//int intRoleID;
GridDataItem gdiItem = e.Item as GridDataItem;
if (gdiItem == null)
{
return;
}
if (e.Item.IsInEditMode)
{
UserControls.GridPersonSearch gpsMemberName = (UserControls.GridPersonSearch)e.Item.FindControl("gpsMemberName");
switch (e.CommandName)
{
case "PerformInsert":
Page.Validate("vgGrid");
if (Page.IsValid)
{
}
else
{
rgCommitteeList.Controls.Add(new LiteralControl(string.Format("<span class=\"ErrorText\">There was an error inserting the record.</span>")));
}
break;
case "Update":
Page.Validate("vgGrid");
if (Page.IsValid)
{
}
else
{
rgCommitteeList.Controls.Add(new LiteralControl(string.Format("<span class=\"ErrorText\">There was an error updating the record.</span>")));
}
break;
}
}
}
The parent Grid displays Committee Name for example student committee. When I click on the student committee it loads the rad grid inside the nested view template that displays me the names of the student associated to that committee.
If there aren't any students for that committee it should display the message from no records template.
My questions are:
When the I call the child rad grid from the nested view template it does not display message from the no record template.
Secondly if there is data it does not display data either on the child grid.
But when I click the add button on the child rad grid it fires the NeedDataSource Event on the Child grid and displays the no records template message or displays student data then!
Can you please tell me how do I handle this, since after I click the committee name it should call the need data source event on child but it isn't doing that for some reason can you kindly let me know about it.
Thanks and Regards
Amitesh