Hi,
I've tried to create a custom editor for TimeSpan data field and it returns an error 'Specified cast is not valid' when I try to set value.
I've tried to create a custom editor for TimeSpan data field and it returns an error 'Specified cast is not valid' when I try to set value.
public
class
RadFilterTimeSpanEditor : RadFilterDataFieldEditor
{
RadMaskedTextBox _timePicker;
public
override
void
InitializeEditor(System.Web.UI.Control container)
{
_timePicker =
new
RadMaskedTextBox();
_timePicker.Mask =
"<0..5><0..9>:<0..5><0..9>"
;
container.Controls.Add(_timePicker);
}
public
override
Type DataType
{
get
{
return
typeof
(TimeSpan);
}
set
{}
}
public
override
System.Collections.ArrayList ExtractValues()
{
ArrayList list =
new
ArrayList(1);
if
(!
string
.IsNullOrWhiteSpace(_timePicker.Text))
{
TimeSpan ts =
new
TimeSpan(00,
int
.Parse(_timePicker.Text.Substring(0, 2)),
int
.Parse(_timePicker.Text.Substring(2, 2)));
list.Add(ts);
}
return
list;
}
public
override
void
SetEditorValues(System.Collections.ArrayList values)
{
if
(values !=
null
&& values.Count > 0)
{
if
(values[0] ==
null
&& !(values[0]
is
TimeSpan))
return
;
TimeSpan ts = (TimeSpan)values[0];
_timePicker.Text =
string
.Format(
"{0:00}{1:00}"
, ts.Minutes, ts.Seconds);
}
}
protected
override
void
CopySettings(RadFilterDataFieldEditor baseEditor)
{
base
.CopySettings(baseEditor);
var editor = baseEditor
as
RadFilterTimeSpanEditor;
}
public
partial
class
_Default : System.Web.UI.Page
{
protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(!IsPostBack)
{
RadFilterTimeSpanEditor editorTimeSpan =
new
RadFilterTimeSpanEditor();
RadFilter1.FieldEditors.Add(editorTimeSpan);
editorTimeSpan.FieldName =
"ShipingDuration"
;
editorTimeSpan.DisplayName =
"Shipping Duration"
;
}
}
protected
void
RadFilter1_FieldEditorCreating(
object
sender, Telerik.Web.UI.RadFilterFieldEditorCreatingEventArgs e)
{
if
(e.EditorType ==
"RadFilterTimeSpanEditor"
)
{
e.Editor =
new
RadFilterTimeSpanEditor();
}
}
}
<
telerik:RadFilter
ID
=
"RadFilter1"
runat
=
"server"
CssClass
=
"RadFilter RadFilter_Default RadFilter RadFilter_Default "
FilterContainerID
=
"RadGrid1"
OnFieldEditorCreating
=
"RadFilter1_FieldEditorCreating"
>
</
telerik:RadFilter
>
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
AllowPaging
=
"True"
AutoGenerateColumns
=
"False"
CellSpacing
=
"0"
DataSourceID
=
"ObjectDataSource1"
GridLines
=
"None"
>
<
ClientSettings
>
<
Selecting
CellSelectionMode
=
"None"
></
Selecting
>
</
ClientSettings
>
<
MasterTableView
DataSourceID
=
"ObjectDataSource1"
>
<
CommandItemSettings
ExportToPdfText
=
"Export to PDF"
></
CommandItemSettings
>
<
RowIndicatorColumn
Visible
=
"True"
FilterControlAltText
=
"Filter RowIndicator column"
>
<
HeaderStyle
Width
=
"20px"
></
HeaderStyle
>
</
RowIndicatorColumn
>
<
ExpandCollapseColumn
Visible
=
"True"
FilterControlAltText
=
"Filter ExpandColumn column"
>
<
HeaderStyle
Width
=
"20px"
></
HeaderStyle
>
</
ExpandCollapseColumn
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"OrderID"
DataType
=
"System.Int32"
FilterControlAltText
=
"Filter OrderID column"
HeaderText
=
"OrderID"
SortExpression
=
"OrderID"
UniqueName
=
"OrderID"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"CustomerID"
FilterControlAltText
=
"Filter CustomerID column"
HeaderText
=
"CustomerID"
SortExpression
=
"CustomerID"
UniqueName
=
"CustomerID"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"EmployeeID"
DataType
=
"System.Int32"
FilterControlAltText
=
"Filter EmployeeID column"
HeaderText
=
"EmployeeID"
SortExpression
=
"EmployeeID"
UniqueName
=
"EmployeeID"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"OrderDate"
DataType
=
"System.DateTime"
FilterControlAltText
=
"Filter OrderDate column"
HeaderText
=
"OrderDate"
SortExpression
=
"OrderDate"
UniqueName
=
"OrderDate"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"RequiredDate"
DataType
=
"System.DateTime"
FilterControlAltText
=
"Filter RequiredDate column"
HeaderText
=
"RequiredDate"
SortExpression
=
"RequiredDate"
UniqueName
=
"RequiredDate"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"ShippedDate"
DataType
=
"System.DateTime"
FilterControlAltText
=
"Filter ShippedDate column"
HeaderText
=
"ShippedDate"
SortExpression
=
"ShippedDate"
UniqueName
=
"ShippedDate"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"ShipVia"
DataType
=
"System.Int32"
FilterControlAltText
=
"Filter ShipVia column"
HeaderText
=
"ShipVia"
SortExpression
=
"ShipVia"
UniqueName
=
"ShipVia"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Freight"
DataType
=
"System.Decimal"
FilterControlAltText
=
"Filter Freight column"
HeaderText
=
"Freight"
SortExpression
=
"Freight"
UniqueName
=
"Freight"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"ShipName"
FilterControlAltText
=
"Filter ShipName column"
HeaderText
=
"ShipName"
SortExpression
=
"ShipName"
UniqueName
=
"ShipName"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"ShipAddress"
FilterControlAltText
=
"Filter ShipAddress column"
HeaderText
=
"ShipAddress"
SortExpression
=
"ShipAddress"
UniqueName
=
"ShipAddress"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"ShipCity"
FilterControlAltText
=
"Filter ShipCity column"
HeaderText
=
"ShipCity"
SortExpression
=
"ShipCity"
UniqueName
=
"ShipCity"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"ShipRegion"
FilterControlAltText
=
"Filter ShipRegion column"
HeaderText
=
"ShipRegion"
SortExpression
=
"ShipRegion"
UniqueName
=
"ShipRegion"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"ShipPostalCode"
FilterControlAltText
=
"Filter ShipPostalCode column"
HeaderText
=
"ShipPostalCode"
SortExpression
=
"ShipPostalCode"
UniqueName
=
"ShipPostalCode"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"ShipCountry"
FilterControlAltText
=
"Filter ShipCountry column"
HeaderText
=
"ShipCountry"
SortExpression
=
"ShipCountry"
UniqueName
=
"ShipCountry"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"ShipingDuration"
DataType
=
"System.TimeSpan"
FilterControlAltText
=
"Filter ShipingDuration column"
HeaderText
=
"ShipingDuration"
UniqueName
=
"ShipingDuration"
SortExpression
=
"ShipingDuration"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"EntityState"
DataType
=
"System.Int32"
FilterControlAltText
=
"Filter EntityState column"
HeaderText
=
"EntityState"
ReadOnly
=
"True"
SortExpression
=
"EntityState"
UniqueName
=
"EntityState"
>
</
telerik:GridBoundColumn
>
</
Columns
>
<
EditFormSettings
>
<
EditColumn
FilterControlAltText
=
"Filter EditCommandColumn column"
>
</
EditColumn
>
</
EditFormSettings
>
</
MasterTableView
>
<
FilterMenu
EnableImageSprites
=
"False"
>
</
FilterMenu
>
</
telerik:RadGrid
>
</
div
>
<
asp:ObjectDataSource
ID
=
"ObjectDataSource1"
runat
=
"server"
SelectMethod
=
"GetOrders"
TypeName
=
"NORTHWINDModel.OrdersAdapter"
></
asp:ObjectDataSource
>
public
partial
class
Orders
{
public
TimeSpan? ShipingDuration
{
get
{
return
this
.ShippedDate -
this
.OrderDate;
}
set
{ }
}
}