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 = ds
End Sub
Protected 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 If
End Sub
Protected 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 If
End Sub
Private 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 If
End Sub
Protected 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 If
End Sub