The following code is used to render a Grid with a nested grid, all Data is bound using NeedDataSource
The issues are as follows
1) there is no expand icon displayed
2) Master grid is reset when the child grid is displayed, the columns that were set using code behind are reset
So What I need is the following, The Delete row Icon is displayed only if the data has a Status of 'A'
If no delete icon is displayed the we will show a icon for Sucess or Failed or Processing
if the Status is Failed, then we should be able to expand the grid to see the errors listed, again if any other status then no expand to be displayed.
There are no internal styles to be used.
Mark up Code
<telerik:RadGrid runat="server" ID="RadGrid2" EnableEmbeddedSkins="False" ShowStatusBar="True" AllowPaging="True" AutoGenerateColumns="False" CellSpacing="0"width="795px" GridLines="None" > <ActiveItemStyle CssClass="alternate" /> <MasterTableView > <ExpandCollapseColumn Visible="True" CollapseImageUrl="~/Images/collapse-large-silver.png" ExpandImageUrl="~/Images/expand-large-silver.png" /> <Columns> <telerik:GridBoundColumn DataField="ImportHeaderID" Display="False" UniqueName="ImportHeaderID" Visible="False" /> <telerik:GridButtonColumn ButtonType="ImageButton" CommandName="Delete" HeaderStyle-Width="40px" ImageUrl="~/Images/icon-quick-link-delete.png" Text="Delete" UniqueName="DeleteColumn"> <HeaderStyle Width="40px" /> </telerik:GridButtonColumn> <telerik:GridHyperLinkColumn AllowFiltering="False" DataNavigateUrlFields="ImportHeaderID" DataNavigateUrlFormatString="~/DisplayFile.aspx?HeaderID={0}" DataTextField="ImportHeaderFilename" HeaderStyle-Width="200px" HeaderText="Filename" Target="_blank" UniqueName="Filename"> <HeaderStyle Width="200px" /> </telerik:GridHyperLinkColumn> <telerik:GridDateTimeColumn AllowFiltering="False" DataField="importHeaderFileLoadDate" HeaderStyle-Width="200px" HeaderText="Uploaded" ReadOnly="true" UniqueName="Uploaded"> <HeaderStyle Width="200px" /> </telerik:GridDateTimeColumn> <telerik:GridBoundColumn AllowFiltering="False" DataField="importHeaderCreatedBy" HeaderStyle-Width="200px" HeaderText="CreatedBy" ReadOnly="true" UniqueName="CreatedBy"> <HeaderStyle Width="200px" /> </telerik:GridBoundColumn> </Columns> <NestedViewTemplate> <asp:Panel ID="Errors" runat="server"> <telerik:RadGrid ID="ErrorGrid" runat="server" EnableEmbeddedSkins="False" ShowStatusBar="True" AllowPaging="True" AutoGenerateColumns="False" CellSpacing="0" ShowHeader="False"> <MasterTableView Name="inner"> <Columns> <telerik:GridBoundColumn DataField="ErrorDescription" /> </Columns> </MasterTableView> </telerik:RadGrid> </asp:Panel> </NestedViewTemplate> <NoRecordsTemplate> <div>Please select filter Settings from above</div> </NoRecordsTemplate> </MasterTableView> <HeaderContextMenu EnableEmbeddedSkins="False"></HeaderContextMenu> </telerik:RadGrid>
Code behind
Protected Sub RadGrid2_NeedDataSource(sender As Object, e As GridNeedDataSourceEventArgs) Handles RadGrid2.NeedDataSource Dim ds As DataSet = DAL.DAL.SelectImportedFiles(0) RadGrid2.DataSource = dsEnd SubProtected Sub RadGrid2_ItemCreated(sender As Object, e As GridItemEventArgs) Handles RadGrid2.ItemCreated If TypeOf e.Item Is GridNestedViewItem Then AddHandler TryCast(e.Item.FindControl("ErrorGrid"), RadGrid).NeedDataSource, AddressOf Me.ErrorGrid_NeedDataSource End IfEnd SubProtected Sub ErrorGrid_NeedDataSource(sender As Object, e As GridNeedDataSourceEventArgs) Dim nestedItem As GridNestedViewItem = DirectCast(TryCast(sender, RadGrid).NamingContainer, GridNestedViewItem) Dim dataKeyValue As String = nestedItem.ParentItem.Item("ImportHeaderID").Text If IsNumeric(dataKeyValue) Then Dim ds As DataSet = DAL.DAL.SelectImportedErrors(CInt(dataKeyValue)) CType(sender, RadGrid).DataSource = ds End IfEnd SubPrivate Sub RadGrid2_ItemCommand(source As Object, e As GridCommandEventArgs) Handles RadGrid2.ItemCommand If e.CommandName = RadGrid.ExpandCollapseCommandName Then Dim item As GridDataItem = TryCast(e.Item, GridDataItem) If Not item.Expanded Then Dim nestedItem As GridNestedViewItem = DirectCast(item.ChildItem, GridNestedViewItem) Dim tempGrid As RadGrid = DirectCast(nestedItem.FindControl("ErrorGrid"), RadGrid) tempGrid.Rebind() End If End IfEnd SubProtected Sub RadGrid2_ItemDataBound(sender As Object, e As GridItemEventArgs) Handles RadGrid2.ItemDataBound If e.Item.ItemType = GridItemType.AlternatingItem Or e.Item.ItemType = GridItemType.Item Then Dim ds As DataSet = TryCast(RadGrid2.DataSource, DataSet) If ds.Tables(0).Rows(DirectCast(e.Item, Telerik.Web.UI.GridDataItem).DataSetIndex)("ImportHeaderState") <> "A" Then Dim item As GridDataItem = DirectCast(e.Item, GridDataItem) Dim cellDelete As TableCell = item("DeleteColumn") cellDelete.Controls.Clear() Dim img As New Image Select Case ds.Tables(0).Rows(DirectCast(e.Item, Telerik.Web.UI.GridDataItem).DataSetIndex)("ImportHeaderState") Case "P" img.ImageUrl = "~/images/icon-notification-box.gif" Case "S" img.ImageUrl = "~/images/icon-notice-box.png" Case "F" img.ImageUrl = "~/images/icon_status_fail_26x26.gif" End Select cellDelete.Controls.Add(img) End If If ds.Tables(0).Rows(DirectCast(e.Item, Telerik.Web.UI.GridDataItem).DataSetIndex)("ImportHeaderState") <> "F" Then Dim item As GridDataItem = DirectCast(e.Item, GridDataItem) Dim cellExpand As TableCell = item("ExpandColumn") cellExpand.Controls.Clear() End If End IfEnd Sub