Hello,
I am going to start telerik controls into my projects and so first of all creating sample apps to become familiar with the controls.
For Radgrid, my requirement is as follows for the filters:
1. If I have a "GridDateTimeColumn" into my grid and I don't want to use <FilterTemplate> for the "From" and "To" date pickers. And I wanted the Between operator always for DateFilters and I added a Reset Filter button also to reset that Date filter. So, to achieve that I did some changes intoItemCreated event. Everything is working like a charm. The issue comes when user is trying to enter the same dates into From and To date pickers nd press <Tab> key, its not filtering the grid. I tried to debug the code and I found that the the FilterExpression of grid getting built like this:
(([ShippingDate] >= '2/3/2020,12:00:00,AM') AND ([ShippingDate] <= '2/3/2020,12:00:00,AM'))
Time is included here. So, can you please help me out for this issue.
2. How can I validate the filter for the column where I want to display the currency or a number value. It is right now allowing me to enter any text I want. It should allow me to enter digits and decimal only.
For the assistance, I am attaching a sample project here which can describe what I am trying to achieve.
Thanks in advance. Please look into these issues and try to assist me ASAP.
Regards,
Vertis Software
ASPX Page code
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestFilters.aspx.cs" Inherits="RadGridFilters.TestFilters" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
<script type="text/javascript">
function ResetCurrentDateColumnFilter(dateFilterUniqueName, radgridClientID) {
var masterTableView = $find(radgridClientID).get_masterTableView();
masterTableView.filter(dateFilterUniqueName, "", Telerik.Web.UI.GridFilterFunction.NoFilter);
}
</script>
</telerik:RadCodeBlock>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager runat="server" ID="TestFilterScriptManager" />
<telerik:RadAjaxLoadingPanel runat="server" ID="TestFilterRadAjaxLoadingPanel" />
<telerik:RadAjaxManager ID="RadAjaxLoadingPanelRadAjaxManager" runat="server" DefaultLoadingPanelID="TestFilterRadAjaxLoadingPanel">
<AjaxSettings>
<telerik:AjaxSetting AjaxControlID="TestFilterRadGrid">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="TestFilterRadGrid" />
</UpdatedControls>
</telerik:AjaxSetting>
</AjaxSettings>
</telerik:RadAjaxManager>
<table style="width: 900px; padding-left: 250px;">
<tr>
<td>
<telerik:RadGrid ID="TestFilterRadGrid" runat="server" Skin="Outlook" Width="600px"
GridLines="None" AllowSorting="true" AllowPaging="true" AllowFilteringByColumn="true" AutoGenerateColumns="false"
EnableLinqExpressions="false" OnNeedDataSource="TestFilterRadGrid_NeedDataSource" OnItemCreated="TestFilterRadGrid_ItemCreated">
<PagerStyle Mode="NextPrevAndNumeric" AlwaysVisible="true" />
<MasterTableView TableLayout="Fixed" CommandItemDisplay="None" Width="100%">
<Columns>
<telerik:GridBoundColumn UniqueName="ShippedToPerson" HeaderText="Shipped To" AutoPostBackOnFilter="true"
DataField="ShippedToPerson" DataType="System.String" HeaderStyle-Width="150px" CurrentFilterFunction="Contains" />
<telerik:GridDateTimeColumn UniqueName="ShippingDate" HeaderText="Shipping Date" AutoPostBackOnFilter="true"
DataField="ShippingDate" DataType="System.DateTime" HeaderStyle-Width="150px" CurrentFilterFunction="Between"
PickerType="DatePicker" EnableRangeFiltering="true" ShowFilterIcon="false" />
<telerik:GridBoundColumn UniqueName="Amount" HeaderText="Amount" AutoPostBackOnFilter="true"
DataField="Amount" DataType="System.Double" HeaderStyle-Width="150px" CurrentFilterFunction="EqualTo"
DataFormatString="{0:C}" />
</Columns>
<CommandItemSettings ShowExportToWordButton="false" ShowExportToExcelButton="true"
ShowExportToCsvButton="false" ShowExportToPdfButton="false" />
</MasterTableView>
<GroupingSettings CaseSensitive="false" />
</telerik:RadGrid>
</td>
</tr>
</table>
</form>
</body>
</html>
ASPX.CS Page code
public partial class TestFilters : Page
{
protected void TestFilterRadGrid_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
DataTable dataTable = new DataTable();
dataTable.Columns.Add(new DataColumn("ShippedToPerson", typeof(string)));
dataTable.Columns.Add(new DataColumn("ShippingDate", typeof(DateTime)));
dataTable.Columns.Add(new DataColumn("Amount", typeof(double)));
for (int index = 1; index <= 10; index++)
{
DataRow row = dataTable.NewRow();
row["ShippedToPerson"] = string.Format("Person {0}", index);
row["ShippingDate"] = DateTime.Now.AddDays(index);
row["Amount"] = 1.4 * index;
dataTable.Rows.Add(row);
}
TestFilterRadGrid.DataSource = dataTable;
}
protected void TestFilterRadGrid_ItemCreated(object sender, GridItemEventArgs e)
{
if (e.Item is GridFilteringItem)
{
GridFilteringItem filters = e.Item as GridFilteringItem;
if (filters == null)
return;
foreach (GridTableCell control in filters.Controls)
{
if (control.Column.DataType == typeof(DateTime))
{
string dateFilterUniqueName = control.Column.UniqueName;
LiteralControl fromLiteralControl = filters[dateFilterUniqueName].Controls[0] as LiteralControl;
if (fromLiteralControl != null)
fromLiteralControl.Text = string.Format("<span style='padding-right: 2px; vertical-align: top;'>{0}:</span>", "From");
LiteralControl toLiteralControl = filters[dateFilterUniqueName].Controls[3] as LiteralControl;
if (toLiteralControl != null)
toLiteralControl.Text = string.Format("<br /><span style='padding-right: 18px; vertical-align: top;'>{0}:</span>", "To");
ImageButton clearCurrentDateFilterButton = new ImageButton();
clearCurrentDateFilterButton.ID = dateFilterUniqueName;
clearCurrentDateFilterButton.ImageUrl = "clearFilter.png";
clearCurrentDateFilterButton.ToolTip = "Reset Filter";
clearCurrentDateFilterButton.Attributes.Add("style", "width: 19px; vertical-align: top; padding-left: 2px;");
clearCurrentDateFilterButton.Attributes.Add("onclick", string.Format("javascript: ResetCurrentDateColumnFilter('{0}', '{1}'); return false;",
dateFilterUniqueName, TestFilterRadGrid.ClientID));
filters[dateFilterUniqueName].Controls.AddAt(6, clearCurrentDateFilterButton);
}
}
}
}
}