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

[Solved] RadDatePicker filter not working correctly when changing DisplayDateFormat

2 Answers 175 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Meng
Top achievements
Rank 1
Meng asked on 01 Mar 2013, 06:54 PM
Hi there,

I am using a RadDatePicker filter with the DisplayDateFormat="MM/dd/yyyy" and filter function=LessThanOrEqualTo. It seems the filter not returning the correct data, for example, if I set the RadDatePicker ="07/12/1996", the filter returning date prior to December 7th, 1996, while I am actually expecting date prior to July 12th, 1996.

Please see my following code (database is NorthWind), any help is greatly appreciated.

<body>
    <form id="form1" runat="server">
        <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
            <Scripts>
                <%--Needed for JavaScript IntelliSense in VS2010--%>
                <%--For VS2008 replace RadScriptManager with ScriptManager--%>
                <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js" />
                <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQuery.js" />
                <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQueryInclude.js" />
            </Scripts>
        </telerik:RadScriptManager>
        <script type="text/javascript">
            //Put your JavaScript code here.
        </script>
        <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
            <AjaxSettings>
                <telerik:AjaxSetting AjaxControlID="RadGrid1">
                    <UpdatedControls>
                        <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" />
                    </UpdatedControls>
                </telerik:AjaxSetting>
            </AjaxSettings>
        </telerik:RadAjaxManager>
        <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Skin="Default"></telerik:RadAjaxLoadingPanel>
        <telerik:RadGrid ID="RadGrid1" runat="server" AllowPaging="True" CellSpacing="0"
            GridLines="None" Width="800px" AllowFilteringByColumn="true" EnableLinqExpressions="false" AutoGenerateColumns="false" OnNeedDataSource="RadGrid1_NeedDataSource" ShowFooter="True">
            <MasterTableView AutoGenerateColumns="false" EditMode="InPlace" AllowFilteringByColumn="True"
            ShowFooter="True" TableLayout="Auto">
                <Columns>
                    <telerik:GridTemplateColumn DataField="Freight" HeaderText="Freight" SortExpression="Freight" AutoPostBackOnFilter="true" CurrentFilterFunction="GreaterThanOrEqualTo"
                        ShowFilterIcon="false">
                            <ItemTemplate>
                                <asp:LinkButton ID="lbl_freight" runat="server" Text='<%#Eval("Freight")%>' Visible="true"/>
                            </ItemTemplate>
                    </telerik:GridTemplateColumn>
                    <telerik:GridTemplateColumn DataField="ShipName" HeaderText="Ship Name" SortExpression="ShipName" AutoPostBackOnFilter="true" CurrentFilterFunction="Contains"
                    ShowFilterIcon="false">
                        <ItemTemplate>
                            <asp:LinkButton ID="lbl_name" runat="server" Text='<%#Eval("ShipName")%>' Visible="true"/>
                        </ItemTemplate>
                   </telerik:GridTemplateColumn>
                    <telerik:GridTemplateColumn DataField="OrderDate" UniqueName="OrderDate" HeaderText="Order Date" SortExpression="OrderDate">
                    <FilterTemplate>
                        <telerik:RadDatePicker ID="filterOrderDate" runat="server" Width="100%" ClientEvents-OnDateSelected="DateSelected"
                            DbSelectedDate='<%# SetOrderDate(Container) %>'><DateInput ID="DateInput1" runat="server"  DateFormat="MM/dd/yyyy" DisplayDateFormat="MM/dd/yyyy"></DateInput
                        </telerik:RadDatePicker
                        <telerik:RadScriptBlock ID="RadScriptBlock3" runat="server">
                            <script type="text/javascript">
                                function DateSelected(sender, args) {
                                    var tableView = $find("<%# ((GridItem)Container).OwnerTableView.ClientID %>");
  
                                    var date = FormatSelectedDate(sender);
  
                                    tableView.filter("OrderDate", date, "LessThanOrEqualTo");
                                }
                                function FormatSelectedDate(picker) {
                                    var date = picker.get_selectedDate();
                                    var dateInput = picker.get_dateInput();
                                    var formattedDate = dateInput.get_dateFormatInfo().FormatDate(date, dateInput.get_displayDateFormat());
  
                                    return formattedDate;
                                }
                            </script>
                        </telerik:RadScriptBlock>
                    </FilterTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lbl_duedate_gv" runat="server" Text='<%#Eval("OrderDate", "{0:MM/dd/yyyy}")%>' Visible="true"/>
                    </ItemTemplate>
               </telerik:GridTemplateColumn>
             </Columns>
            </MasterTableView>
        </telerik:RadGrid>
    </form>
</body>


cs code
public partial class RadGridFilterTest : System.Web.UI.Page
{
    protected void RadGrid1_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
    {
        LoadData();
    }
  
    private void LoadData()
    {
        RadGrid1.DataSource = GetDataTable("SELECT OrderID, OrderDate, Freight, ShipName, ShipCountry FROM Orders");
    }
  
    public DataTable GetDataTable(string query)
    {
        String ConnString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        SqlConnection conn = new SqlConnection(ConnString);
        SqlDataAdapter adapter = new SqlDataAdapter();
        adapter.SelectCommand = new SqlCommand(query, conn);
  
        DataTable myDataTable = new DataTable();
  
        conn.Open();
        try
        {
            adapter.Fill(myDataTable);
        }
        finally
        {
            conn.Close();
        }
  
        return myDataTable;
    }
  
    protected DateTime? SetOrderDate(GridItem item)
    {
        if (item.OwnerTableView.GetColumn("OrderDate").CurrentFilterValue == string.Empty)
        {
            return new DateTime?();
        }
        else
        {
            DateTime DT = new DateTime();
              
            DT = DateTime.ParseExact(item.OwnerTableView.GetColumn("OrderDate").CurrentFilterValue, "MM/dd/yyyy", null);
            //DT = DateTime.Parse(item.OwnerTableView.GetColumn("OrderDate").CurrentFilterValue);
            return DT;
        }
    }
}

2 Answers, 1 is accepted

Sort by
0
Meng
Top achievements
Rank 1
answered on 04 Mar 2013, 01:24 PM
Any ideas? Need help on this issue.
0
Meng
Top achievements
Rank 1
answered on 04 Mar 2013, 07:02 PM
Is this a bug? Coz the filter works fine if I change Date Format to "dd/MM/yyyy" or "yyyy/MM/dd", and it fails once I change it to "MM/dd/yyyy". But I do need the date format set to "MM/dd/yyyy", please help.
Tags
Grid
Asked by
Meng
Top achievements
Rank 1
Answers by
Meng
Top achievements
Rank 1
Share this question
or