This is a migrated thread and some comments may be shown as answers.

RadGrid not showing records

1 Answer 99 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Cole
Top achievements
Rank 1
Cole asked on 08 Nov 2011, 06:12 AM
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
ltcs = ltcs.Where(l => Object.Equals(l.status, null));
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!!!

<%@ 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());
        }
    }
}

1 Answer, 1 is accepted

Sort by
0
Marin
Telerik team
answered on 10 Nov 2011, 01:33 PM
Hi Cole,

 Can you confirm that the DataSource that you pass to the grid at the end of the NeedDataSource event actually contains the collection of objects that you need. Some of the LINQ functions have deferred execution so you may need to force the query to be immediately executed so that it returns the actual collection:

RadGrid1.DataSource = ltcs.Skip(RadGrid1.CurrentPageIndex * RadGrid1.PageSize).Take(RadGrid1.PageSize).ToList();

Kind regards,
Marin
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now
Tags
Grid
Asked by
Cole
Top achievements
Rank 1
Answers by
Marin
Telerik team
Share this question
or