I have a Radgrid control on a page that users a master/detail table to display data. In this scenario not every master record will have a detail record so I don't want to display the No Record line item. This all works fine on the initial load of the page and grid, see image 1. When a user selects a filter such a Region or Client is when I start having problems, see image 2. All of the details rows are now displayed even it there is not data. I've tried several of the code examples online but can't seem to get them working with the filters.
<
telerik:RadGrid
ID
=
"rgVendors"
runat
=
"server"
Skin
=
"Web20"
DataSourceID
=
"edsVendors"
ShowStatusBar
=
"true"
AutoGenerateColumns
=
"False"
AllowSorting
=
"True"
AllowMultiRowSelection
=
"False"
AllowPaging
=
"True"
AllowAutomaticDeletes
=
"true"
GridLines
=
"None"
PageSize
=
"25"
SortingSettings-EnableSkinSortStyles
=
"false"
OnDetailTableDataBind
=
"rgVendors_DetailTableDataBind"
OnItemCommand
=
"rgVendors_ItemCommand"
OnItemEvent
=
"rgVendors_ItemEvent"
OnItemDataBound
=
"rgVendors_ItemDataBound"
OnDeleteCommand
=
"rgVendors_DeleteCommand"
OnSelectedIndexChanged
=
"rgVendors_SelectedIndexChanged"
OnPreRender
=
"rgVendors_PreRender"
>
<
MasterTableView
DataKeyNames
=
"ClientID,VendorID,VendorDetailID"
Name
=
"rgMaster"
HierarchyLoadMode
=
"ServerBind"
HierarchyDefaultExpanded
=
"true"
HeaderStyle-BackColor
=
"#7FA5D7"
ItemStyle-BackColor
=
"#B0C4DE"
AlternatingItemStyle-BackColor
=
"White"
>
<
Columns
>
<
telerik:GridButtonColumn
Text
=
"Select"
UniqueName
=
"Select"
CommandName
=
"Select"
>
</
telerik:GridButtonColumn
>
<
telerik:GridBoundColumn
DataField
=
"VendorDetailID"
ReadOnly
=
"true"
Visible
=
"false"
UniqueName
=
"VendorDetailID"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Client.ClientID"
ReadOnly
=
"true"
UniqueName
=
"ClientID"
Visible
=
"false"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Client Name"
DataField
=
"Client.ClientName"
UniqueName
=
"ClientName"
HeaderStyle-Width
=
"100px"
ReadOnly
=
"true"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Vendor Name"
DataField
=
"Vendor.VendorName"
UniqueName
=
"VendorName"
ReadOnly
=
"true"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HeaderText
=
"Service Provided"
DataField
=
"VendorService.ServiceName"
UniqueName
=
"ServiceName"
ReadOnly
=
"true"
>
</
telerik:GridBoundColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Address"
HeaderStyle-Width
=
"150px"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"Address"
runat
=
"server"
Text='<%# Eval("Vendor.Address") %>'></
asp:Label
><
br
/>
<
asp:Label
ID
=
"City"
runat
=
"server"
Text='<%# Eval("Vendor.City") %>'></
asp:Label
><
br
/>
<
asp:Label
ID
=
"State"
runat
=
"server"
Text='<%# Eval("Vendor.State") %>'></
asp:Label
><
br
/>
<
asp:Label
ID
=
"Zip"
runat
=
"server"
Text='<%# Eval("Vendor.Zip") %>'></
asp:Label
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText="Phone<br>Email<
br
>Website" HeaderStyle-Width="100px">
<
ItemTemplate
>
<
asp:Label
ID
=
"Phone"
runat
=
"server"
Text='<%# Eval("Vendor.Phone") %>'></
asp:Label
>
<
br
/>
<
asp:Label
ID
=
"Email"
runat
=
"server"
><
a
href='mailto:<%# DataBinder.Eval(Container.DataItem, "Vendor.Email")%>'><%# DataBinder.Eval(Container.DataItem, "Vendor.Email")%></
a
></
asp:Label
>
<
br
/>
<
asp:HyperLink
ID
=
"hlWebsite"
runat
=
"server"
NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "Vendor.WebSite")%>'
Text='<%# DataBinder.Eval(Container.DataItem, "Vendor.WebSite")%>' Target="_blank"></
asp:HyperLink
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Notes"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"Notes"
runat
=
"server"
Text='<%# Eval("Vendor.Notes") %>'></
asp:Label
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridButtonColumn
ConfirmText
=
"Delete this Client Vendor?"
ConfirmDialogType
=
"RadWindow"
ConfirmTitle
=
"Delete"
ButtonType
=
"ImageButton"
ImageUrl
=
"..\Icons\close.gif"
CommandName
=
"Delete"
/>
</
Columns
>
<
DetailTables
>
<
telerik:GridTableView
DataKeyNames
=
"VendorID,VendorContactID"
Name
=
"rgDetail"
Width
=
"100%"
runat
=
"server"
ItemStyle-BackColor
=
"#6288C2"
AlternatingItemStyle-BackColor
=
"#6288C2"
AllowAutomaticDeletes
=
"true"
>
<
Columns
>
<
telerik:GridButtonColumn
Text
=
"Edit Contact"
UniqueName
=
"Select"
CommandName
=
"Select"
>
</
telerik:GridButtonColumn
>
<
telerik:GridBoundColumn
DataField
=
"VendorContactID"
ReadOnly
=
"true"
UniqueName
=
"ClientID"
Visible
=
"false"
>
</
telerik:GridBoundColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Contact Name"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"ContactName"
runat
=
"server"
Text='<%# Eval("Name") %>'></
asp:Label
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Address"
HeaderStyle-Width
=
"150px"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"Address"
runat
=
"server"
Text='<%# Eval("Address") %>'></
asp:Label
><
br
/>
<
asp:Label
ID
=
"City"
runat
=
"server"
Text='<%# Eval("City") %>'></
asp:Label
><
br
/>
<
asp:Label
ID
=
"State"
runat
=
"server"
Text='<%# Eval("State") %>'></
asp:Label
><
br
/>
<
asp:Label
ID
=
"Zip"
runat
=
"server"
Text='<%# Eval("Zip") %>'></
asp:Label
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Phone"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"Phone"
runat
=
"server"
Text='<%# Eval("Phone") %>'></
asp:Label
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText="Email<br>Website" HeaderStyle-Width="100px">
<
ItemTemplate
>
<
asp:Label
ID
=
"Email"
runat
=
"server"
><
a
href='mailto:<%# DataBinder.Eval(Container.DataItem, "Email")%>'><%# DataBinder.Eval(Container.DataItem, "Email")%></
a
></
asp:Label
>
<
br
/>
<
asp:HyperLink
ID
=
"hlWebsite"
runat
=
"server"
NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "WebSite")%>'
Text='<%# DataBinder.Eval(Container.DataItem, "WebSite")%>' Target="_blank"></
asp:HyperLink
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Notes"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"Notes"
runat
=
"server"
Text='<%# Eval("Notes") %>'></
asp:Label
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridButtonColumn
ConfirmText
=
"Delete this Vendor Contact?"
ConfirmDialogType
=
"RadWindow"
ConfirmTitle
=
"Delete"
ButtonType
=
"ImageButton"
ImageUrl
=
"..\Icons\close.gif"
CommandName
=
"Delete"
/>
</
Columns
>
</
telerik:GridTableView
>
</
DetailTables
>
</
MasterTableView
>
<
ExportSettings
ExportOnlyData
=
"true"
IgnorePaging
=
"true"
OpenInNewWindow
=
"true"
HideStructureColumns
=
"true"
Pdf-PageBottomMargin
=
".5"
Pdf-PageTopMargin
=
".5"
Pdf-PageLeftMargin
=
".5"
Pdf-PageRightMargin
=
".5"
Pdf-PaperSize
=
"Legal"
Pdf-PageWidth
=
"356mm"
Pdf-PageHeight
=
"216mm"
/>
<
PagerStyle
Position
=
"TopAndBottom"
/>
</
telerik:RadGrid
>
<
asp:EntityDataSource
ID
=
"edsVendors"
runat
=
"server"
ConnectionString
=
"name=ProNetData"
DefaultContainerName
=
"ProNetData"
EnableDelete
=
"true"
EnableUpdate
=
"False"
EntitySetName
=
"VendorDetails"
AutoGenerateWhereClause
=
"false"
Include
=
"Vendor,VendorService,Client,RiskAssessment"
Where="(it.Client.ClientID = @ClientID or @ClientID is null)
and (it.Vendor.VendorID = @VendorID or @VendorID is null)
and (it.VendorService.VendorServiceID = @VendorServiceID or @VendorServiceID is null)
and (it.Client.RegionID = @RegionID or @RegionID is null)
and (
it.RiskAssessment.IsCurrent
=
true
)"
OrderBy
=
"it.Client.ClientName"
>
<
WhereParameters
>
<
asp:ControlParameter
ControlID
=
"ddlRegionFilter"
Name
=
"RegionID"
DbType
=
"Int32"
ConvertEmptyStringToNull
=
"true"
/>
<
asp:ControlParameter
ControlID
=
"ddlClientNameFilter"
Name
=
"ClientID"
Type
=
"Int32"
ConvertEmptyStringToNull
=
"true"
/>
<
asp:ControlParameter
ControlID
=
"ddlVendorNameFilter"
Name
=
"VendorID"
Type
=
"Int32"
ConvertEmptyStringToNull
=
"true"
/>
<
asp:ControlParameter
ControlID
=
"ddlServiceNameFilter"
Name
=
"VendorServiceID"
Type
=
"Int32"
ConvertEmptyStringToNull
=
"true"
/>
</
WhereParameters
>
</
asp:EntityDataSource
>
protected
void
rgVendors_DetailTableDataBind(
object
source, Telerik.Web.UI.GridDetailTableDataBindEventArgs e)
{
GridDataItem dataItem = e.DetailTableView.ParentItem;
int
vendorID =
int
.Parse(dataItem.GetDataKeyValue(
"VendorID"
).ToString());
int
clientID =
int
.Parse(dataItem.GetDataKeyValue(
"ClientID"
).ToString());
using
(ProNetData d =
new
ProNetData())
{
var contacts = (from c
in
d.VendorContacts
where c.VendorID == vendorID && c.ClientID == clientID
select
new
{
VendorID = c.VendorID,
VendorContactID = c.VendorContactID,
Name = c.Name,
Address = c.Address,
City = c.City,
State = c.State,
Zip = c.Zip,
Phone = c.Phone,
Email = c.Email,
Website = c.Website,
Notes = c.Notes
}).ToList();
e.DetailTableView.DataSource = contacts;
}
}
protected
void
rgVendors_ItemCommand(
object
source, Telerik.Web.UI.GridCommandEventArgs e)
{
if
(e.CommandName == RadGrid.ExpandCollapseCommandName)
{
foreach
(GridItem item
in
e.Item.OwnerTableView.Items)
{
if
(item.Expanded && item != e.Item)
{
item.Expanded =
false
;
}
}
}
}
protected
void
rgVendors_PreRender(
object
sender, EventArgs e)
{
HideExpandColumnRecursive(rgVendors.MasterTableView);
}
public
void
HideExpandColumnRecursive(GridTableView tableView)
{
GridItem[] nestedViewItems = tableView.GetItems(GridItemType.NestedView);
foreach
(GridNestedViewItem nestedViewItem
in
nestedViewItems)
{
foreach
(GridTableView nestedView
in
nestedViewItem.NestedTableViews)
{
if
(nestedView.Items.Count == 0)
{
nestedView.ParentItem.Expanded =
false
;
}
else
{
nestedView.ParentItem.Expanded =
true
;
}
}
}
}