Hi,
if have create a class inherits from GridBoundColumn and tryed to add custom controls (2 datetime picker and one reset button).
But I down't know whats wrong, because the filtering does not work.
Can someone explain how to do this right?
Here is the code:
Best regards,
Ralf
if have create a class inherits from GridBoundColumn and tryed to add custom controls (2 datetime picker and one reset button).
But I down't know whats wrong, because the filtering does not work.
Can someone explain how to do this right?
Here is the code:
public
class
DateTimeColumn : GridBoundColumn
{
#region Fields
SPField _field;
const
string
_TRACECONST =
"ECSpand.SharePoint.UI.WebUserControls.RecordsOrganizer.FileContent.Columns.DateTimeColumn"
;
SPDateTimeFieldFormatType _formatType = SPDateTimeFieldFormatType.DateTime;
private
RadDatePicker _datePickerFrom;
private
RadDatePicker _datePickerTo;
#endregion
#region Constructor ()
public
DateTimeColumn()
{
}
#endregion
#region Constructor (field)
public
DateTimeColumn(SPField field)
{
this
.AllowSorting =
true
;
this
.DataField = field.Id.ToString();
this
.HeaderText = field.Title;
this
.HeaderTooltip =
""
;
_field = field;
this
.SortExpression = field.Id.ToString();
SPFieldDateTime dtField = field
as
SPFieldDateTime;
if
(dtField !=
null
)
{
_formatType = dtField.DisplayFormat;
}
}
#endregion
#region Methods
#region FormatDataValue (dataValue, item)
protected
override
string
FormatDataValue(
object
dataValue, GridItem item)
{
if
(_field ==
null
)
return
dataValue.ToString();
string
s = dataValue
as
string
;
if
(!
string
.IsNullOrEmpty(s))
{
try
{
SPWeb web = SPContext.Current.Web;
SPRegionalSettings settings = web.RegionalSettings;
if
(web.CurrentUser.RegionalSettings !=
null
)
{
settings = web.CurrentUser.RegionalSettings;
}
DateTime time;
if
(s.Contains(
'T'
) || s.Contains(
'Z'
))
{
time = DateTime.Parse(s, CultureInfo.InvariantCulture);
}
else
{
time = DateTime.ParseExact(s,
"yyyy-MM-dd HH:mm:ss"
, CultureInfo.InvariantCulture);
}
if
(_formatType == SPDateTimeFieldFormatType.DateOnly)
{
return
time.ToShortDateString();
}
else
{
return
Microsoft.SharePoint.Utilities.SPUtility.FormatDate(SPContext.Current.Web, time.ToUniversalTime(), Microsoft.SharePoint.Utilities.SPDateFormat.DateTime);
}
}
catch
(Exception ex)
{
Log.WriteWarning(
"DateTime-Field '"
+ _field.InternalName +
"' could not be parsed. Value was + '"
+ dataValue
as
string
+
"'. Exception was : "
+ ex.ToString(), _TRACECONST);
return
dataValue
as
string
;
}
}
return
"-"
;
}
#endregion
#region SetupFilterControls (cell)
/// <summary>
/// RadGrid will call this method when it initializes the controls inside the filtering item cells
/// </summary>
/// <param name="cell">The TableCell</param>
protected
override
void
SetupFilterControls(System.Web.UI.WebControls.TableCell cell)
{
base
.SetupFilterControls(cell);
if
(cell.Controls.Count > 0)
cell.Controls.RemoveAt(0);
//cell.Style.Add(HtmlTextWriterStyle.WhiteSpace, "nowrap");
_datePickerFrom =
new
RadDatePicker();
//_datePickerFrom.ID = "ColumnFilterDateFrom" + Guid.NewGuid().ToString();
_datePickerFrom.AutoPostBack =
true
;
_datePickerFrom.Skin =
"Office2007"
;
_datePickerFrom.SelectedDateChanged +=
new
Telerik.Web.UI.Calendar.SelectedDateChangedEventHandler(_datePicker_SelectedDateChanged);
_datePickerFrom.ShowPopupOnFocus =
true
;
_datePickerFrom.Width = Unit.Pixel(100);
_datePickerFrom.EnableScreenBoundaryDetection =
false
;
_datePickerFrom.DatePopupButton.ToolTip =
string
.Empty;
_datePickerFrom.Style.Add(HtmlTextWriterStyle.MarginRight,
"5px"
);
_datePickerFrom.EnableTyping =
false
;
_datePickerTo =
new
RadDatePicker();
_datePickerTo.ID =
"ColumnFilterDateFrom"
+ Guid.NewGuid().ToString();
_datePickerTo.AutoPostBack =
true
;
_datePickerTo.Skin =
"Office2007"
;
_datePickerTo.SelectedDateChanged +=
new
Telerik.Web.UI.Calendar.SelectedDateChangedEventHandler(_datePicker_SelectedDateChanged);
_datePickerTo.ShowPopupOnFocus =
true
;
_datePickerTo.Width = Unit.Pixel(100);
_datePickerTo.EnableScreenBoundaryDetection =
false
;
_datePickerTo.DatePopupButton.ToolTip =
string
.Empty;
_datePickerTo.Style.Add(HtmlTextWriterStyle.MarginRight,
"5px"
);
_datePickerTo.EnableTyping =
false
;
ImageButton resetfilterbutton =
new
ImageButton();
if
(!
string
.IsNullOrEmpty(
this
.CurrentFilterValue) &&
this
.CurrentFilterFunction != GridKnownFunction.NoFilter)
resetfilterbutton.ImageUrl =
"/_layouts/images/ecspand/filter_remove_green.png"
;
else
resetfilterbutton.Visible =
false
;
resetfilterbutton.Width = Unit.Pixel(16);
resetfilterbutton.Height = Unit.Pixel(16);
resetfilterbutton.Click +=
new
ImageClickEventHandler(resetfilterbutton_Click);
cell.Controls.AddAt(0, _datePickerFrom);
cell.Controls.AddAt(1, _datePickerTo);
cell.Controls.AddAt(2, resetfilterbutton);
if
(cell.Controls.Count > 3)
cell.Controls.RemoveAt(3);
}
#endregion
#region _datePicker_SelectedDateChanged (sender, e)
private
void
_datePicker_SelectedDateChanged(
object
sender, Telerik.Web.UI.Calendar.SelectedDateChangedEventArgs e)
{
GridFilteringItem filterItem = (GridFilteringItem)((RadDatePicker)sender).NamingContainer;
try
{
if
(_datePickerFrom.SelectedDate !=
null
&& _datePickerTo.SelectedDate ==
null
)
_datePickerTo.SelectedDate = _datePickerFrom.SelectedDate.Value.AddHours(12);
if
(_datePickerFrom.SelectedDate !=
null
&& _datePickerTo.SelectedDate !=
null
)
{
filterItem.FireCommandEvent(
"Filter"
,
new
Pair(GridKnownFunction.Between.ToString(),
this
.UniqueName));
}
else
filterItem.FireCommandEvent(
"Filter"
,
new
Pair(
"NoFilter"
,
this
.UniqueName));
}
catch
{
}
}
#endregion
#region resetfilterbutton_Click (sender, e)
/// <summary>
/// Handles the Click event of the resetbutton to reset the current column filter.
/// </summary>
/// <param name="sender">The sender</param>
/// <param name="e">The ImageClickEventArgs</param>
private
void
resetfilterbutton_Click(
object
sender, ImageClickEventArgs e)
{
if
(_datePickerFrom !=
null
)
{
this
.CurrentFilterValue =
string
.Empty;
this
.CurrentFilterFunction = GridKnownFunction.NoFilter;
GridFilteringItem filterItem = (GridFilteringItem)((RadDatePicker)_datePickerFrom).NamingContainer;
filterItem.FireCommandEvent(
"Filter"
,
new
Pair(
"NoFilter"
,
this
.UniqueName));
}
}
#endregion
#region GetCurrentFilterValueFromControl (cell)
/// <summary>
/// RadGrid will call this method when the filtering value should be extracted from the filtering input control(s)
/// </summary>
/// <param name="cell">The TableCell</param>
/// <returns>The current filter value</returns>
protected
override
string
GetCurrentFilterValueFromControl(TableCell cell)
{
if
(_datePickerFrom.SelectedDate !=
null
)
{
string
data =
string
.Format(
"{0} {1}"
, _datePickerFrom.SelectedDate.Value, _datePickerTo.SelectedDate.Value);
return
data;
}
else
return
string
.Empty;
}
#endregion
#region SetCurrentFilterValueToControl (cell)
/// <summary>
/// RadGrid will call this method when the value should be set to the filtering input control(s)
/// </summary>
/// <param name="cell">The TableCell</param>
protected
override
void
SetCurrentFilterValueToControl(TableCell cell)
{
if
(_datePickerFrom !=
null
)
{
base
.SetCurrentFilterValueToControl(cell);
if
(!
string
.IsNullOrEmpty(
this
.CurrentFilterValue))
{
_datePickerFrom.SelectedDate =
this
.GetDateTimeValueFormCurrentFilterValue(
this
.CurrentFilterValue);
}
}
}
#endregion
#region GetDateTimeValueFormCurrentFilterValue (value)
private
DateTime? GetDateTimeValueFormCurrentFilterValue(
string
value)
{
DateTime? retval =
null
;
if
(!
string
.IsNullOrEmpty(value))
{
DateTime tmp = DateTime.MinValue;
if
(DateTime.TryParse(value,
out
tmp))
retval = Convert.ToDateTime(tmp);
}
return
retval;
}
#endregion
#endregion
}
Best regards,
Ralf