I have implemented a solution for a project that utilizes a RadGrid, custom filter controls, custom filtering, custom sorting, and custom paging. I am using LINQ2SQL for my datasource, and using the NeedDataSource event. Everything is working perfectly, except for when I try to filter a column using
The pager is showing the correct number of records, as I am setting that using the VirtualItemCount property of the radgrid, but when the page loads, it is giving me the "No records to display" message inside the grid.
Below is the .aspx page, the .aspx.cs code behind, and the code for the custom filter control. I have been struggling for a while to figure this out, but can't for the life of me figure out why it wouldn't be working.
HELP ME PLEASE!!!
ltcs = ltcs.Where(l => Object.Equals(l.status,
null
));
Below is the .aspx page, the .aspx.cs code behind, and the code for the custom filter control. I have been struggling for a while to figure this out, but can't for the life of me figure out why it wouldn't be working.
HELP ME PLEASE!!!
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeFile="ListToCountList.aspx.cs" Inherits="ListToCountList" %>
<%@ Register TagPrefix="rad" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
<%@ Register TagPrefix="HU" Namespace="HumanUse.CustomControls" %>
<
asp:Content
ID
=
"Content1"
ContentPlaceHolderID
=
"HeadContent"
runat
=
"Server"
>
<
style
type
=
"text/css"
>
.wait, .wait *
{
cursor: wait !important;
}
</
style
>
</
asp:Content
>
<
asp:Content
ID
=
"Content2"
ContentPlaceHolderID
=
"MainContent"
runat
=
"Server"
>
<
asp:ScriptManager
ID
=
"ScriptManager1"
runat
=
"server"
>
</
asp:ScriptManager
>
<
rad:RadAjaxManager
ID
=
"RadAjaxManager1"
runat
=
"server"
OnAjaxRequest
=
"RadAjaxManager1_AjaxRequest"
DefaultLoadingPanelID
=
"RadAjaxLoadingPanel1"
>
<
AjaxSettings
>
<
rad:AjaxSetting
AjaxControlID
=
"RadAjaxManager1"
>
<
UpdatedControls
>
<
rad:AjaxUpdatedControl
ControlID
=
"RadGrid1"
/>
</
UpdatedControls
>
</
rad:AjaxSetting
>
<
rad:AjaxSetting
AjaxControlID
=
"RadGrid1"
>
<
UpdatedControls
>
<
rad:AjaxUpdatedControl
ControlID
=
"RadGrid1"
LoadingPanelID
=
"RadAjaxLoadingPanel1"
/>
</
UpdatedControls
>
</
rad:AjaxSetting
>
</
AjaxSettings
>
</
rad:RadAjaxManager
>
<
rad:RadAjaxLoadingPanel
ID
=
"RadAjaxLoadingPanel1"
runat
=
"server"
Height
=
"430px"
Width
=
"924px"
Transparency
=
"0"
>
<
img
alt
=
"Loading..."
src='<%= RadAjaxLoadingPanel.GetWebResourceUrl(Page, "Telerik.Web.UI.Skins.Default.Ajax.loading.gif") %>'
style="border: 0;" />
</
rad:RadAjaxLoadingPanel
>
<
rad:RadCodeBlock
ID
=
"RadCodeBlock1"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
function ShowViewForm(id, rowIndex) {
var grid = $find("<%= RadGrid1.ClientID %>");
var rowControl = grid.get_masterTableView().get_dataItems()[rowIndex].get_element();
grid.get_masterTableView().selectItem(rowControl, true);
var manager = GetRadWindowManager();
var window1 = manager.getWindowByName("ListToCountForm");
window1.setUrl("ListToCountForm.aspx?ltcid=" + id);
window1.show();
return false;
}
function refreshGrid(arg, rebindOnly) {
alert('Your changes have been saved successfully');
if (!arg && !rebindOnly) {
$find("<%= RadAjaxManager1.ClientID %>").ajaxRequest("Rebind");
}
else if (rebindOnly) {
$find("<%= RadAjaxManager1.ClientID %>").ajaxRequest("RebindOnly");
}
else {
$find("<%= RadAjaxManager1.ClientID %>").ajaxRequest("RebindOnly");
}
}
</
script
>
</
rad:RadCodeBlock
>
<
rad:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
PageSize
=
"25"
GridLines
=
"None"
AllowCustomPaging
=
"true"
AllowFilteringByColumn
=
"True"
AllowPaging
=
"True"
AllowSorting
=
"True"
EnableLinqExpressions
=
"false"
AutoGenerateColumns
=
"False"
>
<
MasterTableView
ClientDataKeyNames
=
"assignment_id"
AllowCustomPaging
=
"true"
AllowMultiColumnSorting
=
"true"
AllowCustomSorting
=
"true"
DataKeyNames
=
"assignment_id"
AutoGenerateColumns
=
"False"
AllowFilteringByColumn
=
"True"
>
<
Columns
>
<
rad:GridBoundColumn
HeaderText
=
"Segment"
AllowFiltering
=
"true"
AllowSorting
=
"true"
DataField
=
"segment_id"
UniqueName
=
"segment_id"
DataType
=
"System.Int32"
SortExpression
=
"segment_id"
CurrentFilterFunction
=
"EqualTo"
ShowFilterIcon
=
"false"
>
</
rad:GridBoundColumn
>
<
rad:GridBoundColumn
HeaderText
=
"Photo Date"
DataField
=
"photo_date"
DataType
=
"System.DateTime"
DataFormatString
=
"{0:d}"
SortExpression
=
"photo_date"
UniqueName
=
"date"
CurrentFilterFunction
=
"EqualTo"
ShowFilterIcon
=
"false"
>
</
rad:GridBoundColumn
>
<
HU:DistinctLTCValueDropDownFilterColumn
FilterControlWidth
=
"60"
HeaderText
=
"Initials"
AllowFiltering
=
"true"
DataField
=
"initials"
UniqueName
=
"initials"
SortExpression
=
"initials"
ShowFilterIcon
=
"false"
>
<
ItemTemplate
>
<%#Eval("initials") %>
</
ItemTemplate
>
</
HU:DistinctLTCValueDropDownFilterColumn
>
<
HU:DistinctLTCValueDropDownFilterColumn
FilterControlWidth
=
"60"
HeaderText
=
"Zone"
AllowFiltering
=
"true"
DataField
=
"zone"
UniqueName
=
"zone"
SortExpression
=
"zone"
ShowFilterIcon
=
"false"
>
<
ItemTemplate
>
<%#Eval("zone")%>
</
ItemTemplate
>
</
HU:DistinctLTCValueDropDownFilterColumn
>
<
HU:DistinctLTCValueDropDownFilterColumn
FilterControlWidth
=
"140"
HeaderText
=
"Field Office"
AllowFiltering
=
"true"
DataField
=
"FieldOffice"
UniqueName
=
"FieldOffice"
SortExpression
=
"FieldOffice"
ShowFilterIcon
=
"false"
>
<
ItemTemplate
>
<%#Eval("FieldOffice")%>
</
ItemTemplate
>
</
HU:DistinctLTCValueDropDownFilterColumn
>
<
HU:DistinctLTCValueDropDownFilterColumn
FilterControlWidth
=
"100"
HeaderText
=
"Status"
AllowFiltering
=
"true"
DataField
=
"status"
UniqueName
=
"status"
SortExpression
=
"status"
ShowFilterIcon
=
"false"
>
<
ItemTemplate
>
<%#Eval("status")%>
</
ItemTemplate
>
</
HU:DistinctLTCValueDropDownFilterColumn
>
<
rad:GridBoundColumn
HeaderText
=
"Last User"
DataField
=
"last_updated_user"
ItemStyle-VerticalAlign
=
"Top"
DataType
=
"System.String"
SortExpression
=
"last_updated_user"
AllowFiltering
=
"true"
AllowSorting
=
"true"
CurrentFilterFunction
=
"EqualTo"
ShowFilterIcon
=
"false"
>
</
rad:GridBoundColumn
>
<
rad:GridBoundColumn
HeaderText
=
"Last Update"
DataField
=
"last_update_date"
ItemStyle-VerticalAlign
=
"Top"
DataFormatString
=
"{0:MM/dd/yyyy}"
UniqueName
=
"last_update_date"
SortExpression
=
"last_update_date"
AllowSorting
=
"true"
CurrentFilterFunction
=
"EqualTo"
ShowFilterIcon
=
"false"
>
</
rad:GridBoundColumn
>
<
HU:DistinctLTCValueDropDownFilterColumn
FilterControlWidth
=
"50"
HeaderText
=
"Boating"
AllowFiltering
=
"true"
DataField
=
"boating"
UniqueName
=
"boating"
SortExpression
=
"boating"
ShowFilterIcon
=
"false"
>
<
ItemTemplate
>
<%#Eval("boating")%>
</
ItemTemplate
>
</
HU:DistinctLTCValueDropDownFilterColumn
>
<
rad:GridTemplateColumn
ItemStyle-VerticalAlign
=
"Top"
UniqueName
=
"TemplateEditColumn"
AllowFiltering
=
"True"
HeaderText
=
"Edit"
HeaderStyle-Wrap
=
"false"
>
<
ItemTemplate
>
<
asp:HyperLink
ID
=
"EditLink"
runat
=
"server"
Text
=
"Edit"
></
asp:HyperLink
>
</
ItemTemplate
>
<
FilterTemplate
>
<
asp:Button
runat
=
"server"
ID
=
"btnFilter"
Text
=
"Filter"
OnClick
=
"btn_Click"
/>
<
br
/>
<
asp:Button
runat
=
"server"
ID
=
"btnClearFilter"
Text
=
"Clear"
OnClick
=
"btn_ClearClick"
/>
</
FilterTemplate
>
</
rad:GridTemplateColumn
>
</
Columns
>
</
MasterTableView
>
</
rad:RadGrid
>
<
rad:RadWindowManager
ID
=
"RadWindowManager1"
runat
=
"server"
Skin
=
"Vista"
>
<
Windows
>
<
rad:RadWindow
Skin
=
"Vista"
ID
=
"ListToCountForm"
ClientIDMode
=
"Static"
RestrictionZoneID
=
"main"
ShowContentDuringLoad
=
"false"
runat
=
"server"
Title
=
"List To Count Form"
Width
=
"400px"
Height
=
"600px"
ReloadOnShow
=
"true"
Modal
=
"true"
/>
</
Windows
>
</
rad:RadWindowManager
>
</
asp:Content
>
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
Telerik.Web.UI;
using
HumanUse;
using
System.Configuration;
using
System.Text.RegularExpressions;
public
partial
class
ListToCountList : BasePage
{
protected
void
Page_Load(
object
sender, EventArgs e)
{
base
.CheckSecurity(
true
);
RadGrid1.GroupingSettings.CaseSensitive =
false
;
RadGrid1.ItemDataBound +=
new
Telerik.Web.UI.GridItemEventHandler(RadGrid1_ItemDataBound);
RadGrid1.NeedDataSource +=
new
GridNeedDataSourceEventHandler(RadGrid1_NeedDataSource);
}
protected
void
btn_Click(
object
sender, EventArgs e)
{
RadGrid1.Rebind();
}
protected
void
btn_ClearClick(
object
sender, EventArgs e)
{
RadGrid1.MasterTableView.FilterExpression =
""
;
foreach
(GridColumn c
in
RadGrid1.MasterTableView.Columns)
{
c.CurrentFilterValue =
""
;
}
RadGrid1.Rebind();
}
void
RadGrid1_NeedDataSource(
object
source, GridNeedDataSourceEventArgs e)
{
WCSAerialDataContext db =
new
WCSAerialDataContext(ConfigurationManager.ConnectionStrings[
"WCS_AerialConnectionString"
].ConnectionString);
IQueryable<vwLTC> ltcs = db.vwLTCs;
if
(ShouldApplySortFilterOrGroup())
{
if
(RadGrid1.MasterTableView.FilterExpression !=
""
)
{
foreach
(String s
in
RadGrid1.MasterTableView.FilterExpression.Replace(
"AND"
,
"~"
).Split(
'~'
))
{
string
column = s.Substring(2, s.IndexOf(
"]"
, 2) - 2);
string
value =
""
;
if
(column !=
"segment_id"
)
{
value = RadGrid1.MasterTableView.FilterExpression.Substring(RadGrid1.MasterTableView.FilterExpression.IndexOf(
"'"
) + 1, RadGrid1.MasterTableView.FilterExpression.IndexOf(
"'"
, RadGrid1.MasterTableView.FilterExpression.IndexOf(
"'"
) + 1) - (RadGrid1.MasterTableView.FilterExpression.IndexOf(
"'"
) + 1));
}
else
{
value = RadGrid1.MasterTableView.FilterExpression.Substring(RadGrid1.MasterTableView.FilterExpression.IndexOf(
"="
) + 2, (RadGrid1.MasterTableView.FilterExpression.IndexOf(
")"
, RadGrid1.MasterTableView.FilterExpression.IndexOf(
"="
) + 2) - (RadGrid1.MasterTableView.FilterExpression.IndexOf(
"="
) + 2)));
}
if
(value ==
"NULL"
)
value =
null
;
switch
(column)
{
case
"segment_id"
:
ltcs = ltcs.Where(l => l.segment_id ==
int
.Parse(value));
break
;
case
"photo_date"
:
ltcs = ltcs.Where(l => l.photo_date == DateTime.Parse(value));
break
;
case
"initials"
:
if
(value ==
null
)
{
ltcs = ltcs.Where(l => Object.Equals(l.initials,
null
));
}
else
{
value = value.Replace(
"%"
,
""
);
ltcs = ltcs.Where(l => l.initials == value);
}
break
;
case
"zone"
:
if
(value ==
null
)
{
ltcs = ltcs.Where(l => Object.Equals(l.zone,
null
));
}
else
{
value = value.Replace(
"%"
,
""
);
ltcs = ltcs.Where(l => l.zone == value);
}
break
;
case
"FieldOffice"
:
if
(value ==
null
)
{
ltcs = ltcs.Where(l => Object.Equals(l.FieldOffice,
null
));
}
else
{
value = value.Replace(
"%"
,
""
);
ltcs = ltcs.Where(l => l.FieldOffice == value);
}
break
;
case
"status"
:
if
(value ==
null
)
{
ltcs = ltcs.Where(l => Object.Equals(l.status,
null
));
}
else
{
value = value.Replace(
"%"
,
""
);
ltcs = ltcs.Where(l => l.status == value);
}
break
;
case
"last_updated_user"
:
if
(value ==
null
)
{
ltcs = ltcs.Where(l => Object.Equals(l.last_updated_user,
null
));
}
else
{
value = value.Replace(
"%"
,
""
);
ltcs = ltcs.Where(l => l.last_updated_user == value);
}
break
;
case
"last_update_date"
:
ltcs = ltcs.Where(l => l.last_update_date == DateTime.Parse(value));
break
;
case
"boating"
:
if
(value ==
null
)
{
ltcs = ltcs.Where(l => Object.Equals(l.boating,
null
));
}
else
{
value = value.Replace(
"%"
,
""
);
ltcs = ltcs.Where(l => l.boating == value);
}
break
;
}
}
}
if
(RadGrid1.MasterTableView.SortExpressions.Count > 0)
{
foreach
(GridSortExpression exp
in
RadGrid1.MasterTableView.SortExpressions)
{
switch
(exp.FieldName)
{
case
"segment_id"
:
if
(exp.SortOrder == GridSortOrder.Ascending)
ltcs = ltcs.OrderBy(l => l.segment_id);
else
if
(exp.SortOrder == GridSortOrder.Descending)
ltcs = ltcs.OrderByDescending(l => l.segment_id);
break
;
case
"photo_date"
:
if
(exp.SortOrder == GridSortOrder.Ascending)
ltcs = ltcs.OrderBy(l => l.photo_date);
else
if
(exp.SortOrder == GridSortOrder.Descending)
ltcs = ltcs.OrderByDescending(l => l.photo_date);
break
;
case
"initials"
:
if
(exp.SortOrder == GridSortOrder.Ascending)
ltcs = ltcs.OrderBy(l => l.initials);
else
if
(exp.SortOrder == GridSortOrder.Descending)
ltcs = ltcs.OrderByDescending(l => l.initials);
break
;
case
"zone"
:
if
(exp.SortOrder == GridSortOrder.Ascending)
ltcs = ltcs.OrderBy(l => l.zone);
else
if
(exp.SortOrder == GridSortOrder.Descending)
ltcs = ltcs.OrderByDescending(l => l.zone);
break
;
case
"FieldOffice"
:
if
(exp.SortOrder == GridSortOrder.Ascending)
ltcs = ltcs.OrderBy(l => l.FieldOffice);
else
if
(exp.SortOrder == GridSortOrder.Descending)
ltcs = ltcs.OrderByDescending(l => l.FieldOffice);
break
;
case
"status"
:
if
(exp.SortOrder == GridSortOrder.Ascending)
ltcs = ltcs.OrderBy(l => l.status);
else
if
(exp.SortOrder == GridSortOrder.Descending)
ltcs = ltcs.OrderByDescending(l => l.status);
break
;
case
"last_updated_user"
:
if
(exp.SortOrder == GridSortOrder.Ascending)
ltcs = ltcs.OrderBy(l => l.last_updated_user);
else
if
(exp.SortOrder == GridSortOrder.Descending)
ltcs = ltcs.OrderByDescending(l => l.last_updated_user);
break
;
case
"last_update_date"
:
if
(exp.SortOrder == GridSortOrder.Ascending)
ltcs = ltcs.OrderBy(l => l.last_update_date);
else
if
(exp.SortOrder == GridSortOrder.Descending)
ltcs = ltcs.OrderByDescending(l => l.last_update_date);
break
;
case
"boating"
:
if
(exp.SortOrder == GridSortOrder.Ascending)
ltcs = ltcs.OrderBy(l => l.boating);
else
if
(exp.SortOrder == GridSortOrder.Descending)
ltcs = ltcs.OrderByDescending(l => l.boating);
break
;
}
}
}
}
RadGrid1.VirtualItemCount = ltcs.Count();
RadGrid1.DataSource = ltcs.Skip(RadGrid1.CurrentPageIndex * RadGrid1.PageSize).Take(RadGrid1.PageSize);
}
public
bool
ShouldApplySortFilterOrGroup()
{
return
RadGrid1.MasterTableView.FilterExpression !=
""
|| RadGrid1.MasterTableView.SortExpressions.Count > 0;
}
void
RadGrid1_ItemDataBound(
object
sender, Telerik.Web.UI.GridItemEventArgs e)
{
if
(e.Item
is
GridDataItem)
{
string
next =
string
.Empty;
string
previous =
string
.Empty;
string
current =
string
.Empty;
current = e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex][
"assignment_id"
].ToString();
HyperLink editLink = (HyperLink)e.Item.FindControl(
"EditLink"
);
editLink.Attributes[
"href"
] =
"#"
;
editLink.Attributes[
"onclick"
] = String.Format(
"return ShowViewForm('{0}','{1}');"
, current, e.Item.ItemIndex);
}
}
protected
void
RadAjaxManager1_AjaxRequest(
object
sender, AjaxRequestEventArgs e)
{
if
(e.Argument ==
"Rebind"
)
{
RadGrid1.MasterTableView.SortExpressions.Clear();
RadGrid1.MasterTableView.GroupByExpressions.Clear();
RadGrid1.Rebind();
}
else
if
(e.Argument ==
"RebindAndNavigate"
)
{
RadGrid1.MasterTableView.SortExpressions.Clear();
RadGrid1.MasterTableView.GroupByExpressions.Clear();
RadGrid1.MasterTableView.CurrentPageIndex = RadGrid1.MasterTableView.PageCount - 1;
RadGrid1.Rebind();
}
else
if
(e.Argument ==
"RebindOnly"
)
{
RadGrid1.Rebind();
}
}
}
using
Telerik.Web.UI;
using
System.Data;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Data.SqlClient;
using
System.Configuration;
using
System.Collections.Generic;
using
System;
namespace
HumanUse.CustomControls
{
/// <summary>
/// Summary description for DistinctValueDropDownFilterColumn
/// </summary>
public
class
DistinctLTCValueDropDownFilterColumn : GridTemplateColumn
{
public
enum
Orders { ASC, DESC }
public
Orders Order {
get
;
set
; }
public
bool
OrderResults {
get
;
set
; }
protected
override
void
SetupFilterControls(TableCell cell)
{
RadComboBox rcBox =
new
RadComboBox();
rcBox.ID =
"DDL"
+
this
.UniqueName;
rcBox.AutoPostBack =
this
.AutoPostBackOnFilter;
rcBox.Width =
this
.FilterControlWidth;
rcBox.SelectedIndexChanged += rcBox_SelectedIndexChanged;
WCSAerialDataContext db =
new
WCSAerialDataContext();
string
q = String.Format(
"SELECT DISTINCT {0} FROM vwLTC"
, DataField);
if
(OrderResults)
{
q +=
" ORDER BY "
+ DataField +
" "
+ Order.ToString();
}
IEnumerable<String> values = db.ExecuteQuery<String>(q);
rcBox.Items.Add(
new
RadComboBoxItem(
"No Filter"
,
""
));
foreach
(
string
s
in
values)
{
if
(String.IsNullOrWhiteSpace(s))
rcBox.Items.Add(
new
RadComboBoxItem(
""
,
"NULL"
));
else
rcBox.Items.Add(
new
RadComboBoxItem(s, s));
}
cell.Controls.Add(rcBox);
}
protected
override
void
SetCurrentFilterValueToControl(TableCell cell)
{
if
(!(
this
.CurrentFilterValue ==
""
))
{
((RadComboBox)cell.Controls[0]).Items.FindItemByValue(
this
.CurrentFilterValue).Selected =
true
;
}
}
protected
override
string
GetCurrentFilterValueFromControl(TableCell cell)
{
string
currentText = ((RadComboBox)cell.Controls[0]).SelectedItem.Text;
string
currentValue = ((RadComboBox)cell.Controls[0]).SelectedItem.Value;
this
.CurrentFilterFunction = (currentText !=
"No Filter"
) ? GridKnownFunction.EqualTo : GridKnownFunction.NoFilter;
return
currentValue;
}
private
void
rcBox_SelectedIndexChanged(
object
sender, RadComboBoxSelectedIndexChangedEventArgs e)
{
((GridFilteringItem)(((RadComboBox)sender).Parent.Parent)).FireCommandEvent(
"Filter"
,
new
Pair());
}
}
}