Hi,
I have a serious problem filtering a GridDateTimeColumn in a dynamically created grid. I tried to correct it following this article:
http://www.telerik.com/help/aspnet/grid/grdfilteringfordatetimecolumnwithdataformatstring.html
but with no result. I use german culture and maybe that is the cause for the problem.
Is there any known issue with that?
Here is the code for creating the grid:
The grid's column are dynamically created like this one:
And the code for the correction I have tried is this (which is executed in ItemCommand event):
I have to admit that I have to use an old version of Telerik controls (Q3/2010 .NET 2.0) because the project needs to run under Mono.
Any help on this would be appreciated.
Best regards
Ferdinand
I have a serious problem filtering a GridDateTimeColumn in a dynamically created grid. I tried to correct it following this article:
http://www.telerik.com/help/aspnet/grid/grdfilteringfordatetimecolumnwithdataformatstring.html
but with no result. I use german culture and maybe that is the cause for the problem.
Is there any known issue with that?
Here is the code for creating the grid:
private
void
createGrid()
{
RadGrid grid =
new
RadGrid();
this
.rgWorkflows = grid;
setGridProperties(grid);
}
private
void
setGridProperties(RadGrid grid)
{
grid.ID =
"rgWorkflows"
;
grid.EnableViewState =
true
;
grid.AutoGenerateColumns =
false
;
grid.AllowSorting =
true
;
grid.AllowPaging =
true
;
grid.AllowFilteringByColumn =
false
;
grid.GridLines = GridLines.None;
grid.Width = Unit.Percentage(99.8);
grid.Height = Unit.Percentage(99.8);
grid.HeaderStyle.Width = Unit.Pixel(150);
grid.AllowMultiRowSelection =
true
;
grid.MasterTableView.PagerStyle.Mode = GridPagerMode.NextPrevNumericAndAdvanced;
grid.ClientSettings.EnableRowHoverStyle =
true
;
grid.ClientSettings.Selecting.AllowRowSelect =
true
;
grid.ClientSettings.Scrolling.AllowScroll =
true
;
grid.ClientSettings.Scrolling.UseStaticHeaders =
true
;
grid.ClientSettings.Scrolling.SaveScrollPosition =
true
;
grid.ClientSettings.Resizing.AllowColumnResize =
true
;
grid.ClientSettings.Resizing.ClipCellContentOnResize =
false
;
grid.ClientSettings.Resizing.EnableRealTimeResize =
true
;
grid.ClientSettings.Resizing.ResizeGridOnColumnResize =
true
;
grid.MasterTableView.DataKeyNames =
new
string
[] {
"Id"
};
grid.MasterTableView.OverrideDataSourceControlSorting =
true
;
grid.PagerStyle.AlwaysVisible =
true
;
if
(!IsPostBack)
{
grid.MasterTableView.PageSize = 15;
}
grid.GroupingSettings.CaseSensitive =
false
;
grid.MasterTableView.PagerStyle.Width = 1000;
grid.MasterTableView.OverrideDataSourceControlSorting =
true
;
grid.MasterTableView.EnableColumnsViewState =
false
;
grid.AllowFilteringByColumn =
true
;
grid.AllowMultiRowSelection =
false
;
}
The grid's column are dynamically created like this one:
public
static
void
AddDateTimeFieldToGridView(
string
fieldName,
string
headerText, RadGrid grid,
int
? width)
{
GridDateTimeColumn dtc =
new
GridDateTimeColumn()
{
HeaderText = headerText,
DataField = fieldName
};
dtc.SortExpression = fieldName.Trim();
dtc.AllowSorting =
true
;
dtc.Resizable =
true
;
dtc.UniqueName = fieldName;
dtc.DataFormatString =
"{0:dd.MM.yyyy}"
;
dtc.PickerType = GridDateTimeColumnPickerType.DateTimePicker;
dtc.UniqueName = fieldName;
if
(width !=
null
)
{
dtc.HeaderStyle.Width = width.Value;
}
grid.Columns.Add(dtc);
}
And the code for the correction I have tried is this (which is executed in ItemCommand event):
private
static
void
setDateFilterPattern(GridCommandEventArgs e, RadGrid grid,
string
fieldName,
string
columnUniqueName)
{
if
(e.CommandName == RadGrid.FilterCommandName
&& ((Pair)e.CommandArgument).Second.ToString() == columnUniqueName
&& ((Pair)e.CommandArgument).First.ToString() !=
"NoFilter"
&& grid !=
null
)
{
e.Canceled =
true
;
GridFilteringItem filterItem = (GridFilteringItem)e.Item;
string
currentPattern = (filterItem[((Pair)e.CommandArgument).Second.ToString()].Controls[0]
as
RadDatePicker).SelectedDate.Value.ToShortDateString();
string
filterPattern =
""
;
string
filterOption = (e.CommandArgument
as
Pair).First.ToString();
GridBoundColumn dateColumn = (GridBoundColumn)e.Item.OwnerTableView.GetColumnSafe(columnUniqueName);
filterPattern = currentPattern;
switch
(filterOption)
{
case
"EqualTo"
:
var dateTime = Convert.ToDateTime(filterPattern);
filterPattern = String.Format(
"["
+ fieldName +
"] > '{0}' AND ["
+ fieldName +
"] < '{1}'"
, filterPattern,
dateTime.AddDays(1).ToShortDateString());
dateColumn.CurrentFilterFunction = GridKnownFunction.EqualTo;
break
;
case
"NotEqualTo"
:
var dateTime1 = Convert.ToDateTime(filterPattern);
filterPattern = String.Format(
"["
+ fieldName +
"] < '{0}' OR ["
+ fieldName +
"] > '{1}'"
, filterPattern,
dateTime1.AddDays(1).ToShortDateString());
dateColumn.CurrentFilterFunction = GridKnownFunction.NotEqualTo;
break
;
case
"GreaterThan"
:
filterPattern =
"["
+ fieldName +
"] > '"
+ filterPattern +
"'"
;
dateColumn.CurrentFilterFunction = GridKnownFunction.GreaterThan;
break
;
case
"LessThan"
:
filterPattern =
"["
+ fieldName +
"] < '"
+ filterPattern +
"'"
;
dateColumn.CurrentFilterFunction = GridKnownFunction.LessThan;
break
;
case
"GreaterThanOrEqualTo"
:
var dateTime2 = Convert.ToDateTime(filterPattern);
filterPattern = String.Format(
"["
+ fieldName +
"] > '{0}' AND ["
+ fieldName +
"] < '{1}' OR ["
+ fieldName +
"] >= '{0}'"
,
filterPattern, dateTime2.AddDays(1).ToShortDateString());
dateColumn.CurrentFilterFunction = GridKnownFunction.GreaterThanOrEqualTo;
break
;
case
"LessThanOrEqualTo"
:
var dateTime3 = Convert.ToDateTime(filterPattern);
filterPattern = String.Format(
"["
+ fieldName +
"] > '{0}' AND ["
+ fieldName +
"] < '{1}' OR ["
+ fieldName +
"] <= '{0}'"
,
filterPattern, dateTime3.AddDays(1).ToShortDateString());
dateColumn.CurrentFilterFunction = GridKnownFunction.GreaterThanOrEqualTo;
break
;
case
"IsNull"
:
filterPattern =
"["
+ fieldName +
"] IS NULL"
;
dateColumn.CurrentFilterFunction = GridKnownFunction.IsNull;
break
;
case
"NotIsNull"
:
filterPattern =
"NOT (["
+ fieldName +
"] IS NULL)"
;
dateColumn.CurrentFilterFunction = GridKnownFunction.NotIsNull;
break
;
}
foreach
(GridColumn column
in
grid.MasterTableView.Columns)
{
if
(column.UniqueName != columnUniqueName)
{
column.CurrentFilterFunction = GridKnownFunction.NoFilter;
column.CurrentFilterValue =
string
.Empty;
}
}
dateColumn.CurrentFilterValue = currentPattern;
grid.MasterTableView.FilterExpression = filterPattern;
filterItem.OwnerTableView.Rebind();
}
}
I have to admit that I have to use an old version of Telerik controls (Q3/2010 .NET 2.0) because the project needs to run under Mono.
Any help on this would be appreciated.
Best regards
Ferdinand