C# 参数类型';Edm.DateTime';和';Edm.String';与此操作不兼容
我试图过滤网格中同一列中的两个不同的(数据选择器)。我尝试使用这两个字段来获取命令。整个过滤过程是在代码隐藏中进行的,到目前为止,它适用于网格中的其他字段。但我有一个奇怪的例外: {“此操作的参数类型'Edm.DateTime'和'Edm.String'不兼容。 接近大于或等于表达式,第6行,第15列。“} 在数据库中,该字段是一个日期时间,是一个单列 我的代码:C# 参数类型';Edm.DateTime';和';Edm.String';与此操作不兼容,c#,asp.net,telerik,C#,Asp.net,Telerik,我试图过滤网格中同一列中的两个不同的(数据选择器)。我尝试使用这两个字段来获取命令。整个过滤过程是在代码隐藏中进行的,到目前为止,它适用于网格中的其他字段。但我有一个奇怪的例外: {“此操作的参数类型'Edm.DateTime'和'Edm.String'不兼容。 接近大于或等于表达式,第6行,第15列。“} 在数据库中,该字段是一个日期时间,是一个单列 我的代码: <telerik:GridBoundColumn DataField="EntryDa
<telerik:GridBoundColumn DataField="EntryDate" DataType="System.DateTime" DataFormatString="{0:dd/MM/yyyy}" FilterControlAltText="Filter EntryDate column"
HeaderText="Date" SortExpression="EntryDate" UniqueName="EntryDate" FilterControlWidth="50px">
<FilterTemplate>
From
<telerik:RadDatePicker ID="FromOrderDatePicker" runat="server" Width="100px" AutoPostBack="true"
OnSelectedDateChanged="FromOrderDatePicker_SelectedDateChanged" OnPreRender="FromOrderDatePicker_PreRender" />
to
<telerik:RadDatePicker ID="ToOrderDatePicker" runat="server" Width="100px" AutoPostBack="true"
OnSelectedDateChanged="ToOrderDatePicker_SelectedDateChanged" OnPreRender="ToOrderDatePicker_PreRender" />
</FilterTemplate>
</telerik:GridBoundColumn>
发布代码是多余的(对于toDatePicker)
private void ExpressionChanged()
{
//重置
TimeReportGrid.MasterTableView.FilterExpression=null;
TimeReportGrid.MasterTableView.Rebind();
如果(ViewState[“FromDatePicker”]!=null&&
ViewState[“ToDatePicker”]!=null&&
ViewState[“FromDatePicker”]。ToString()!=“”&&
ViewState[“ToDatePicker”]。ToString()!=“”)
{
TimeReportGrid.MasterTableView.FilterExpression+=“(it.EntryDate>=”+“ViewState[“FromDatePicker”]。ToString()+”)和(it.EntryDate我的问题的答案非常简单,我只需声明EntryDate是一个看起来像这样的日期时间
TimeReportGrid.MasterTableView.FilterExpression += "(it.EntryDate>= DATETIME '" + ViewState["FromDatePicker"].ToString() + " 00:00') AND (it.EntryDate<= DATETIME '" + ViewState["ToDatePicker"].ToString() + " 23:59')";
TimeReportGrid.MasterTableView.FilterExpression+=“(it.EntryDate>=DATETIME'”+ViewState[“FromDatePicker”].ToString()+“00:00”)和(it.EntryDate快速看一眼,似乎您正在尝试将日期和字符串进行比较。我没有太多使用表达式,但我假设最后是您的FilterExpression。您能先将字符串解析为日期吗?@Chris您的意思是我应该将ViewState解析为日期时间吗?我想是的。我不习惯使用表达式,但看起来您ave类似于it.EntryDate>='2013-05-14'
和类似于it.EntryDate>=DateTime.Parse('2013-05-14')
的东西看起来更好。正如我所说,虽然我没有做过表达式,所以我只是给你一些东西看一下,因为我不是真的能够给你一个解决方案(不确定Edm.DateTime是否特别,例如是否与DateTime兼容)..@Chris解决方案非常简单,我只需在>=之后添加一个DateTime声明,它就可以工作了“^^^^很高兴听到它。你应该给出这个问题的实际答案(而不仅仅是评论)用更改后的代码描述您的答案,以便您可以将其标记为正确答案,其他任何人都可以轻松找到答案。
private void ExpressionChanged()
{
//reset
TimeReportGrid.MasterTableView.FilterExpression = null;
TimeReportGrid.MasterTableView.Rebind();
if (ViewState["FromDatePicker"] != null &&
ViewState["ToDatePicker"] != null &&
ViewState["FromDatePicker"].ToString() != "" &&
ViewState["ToDatePicker"].ToString() != "")
{
TimeReportGrid.MasterTableView.FilterExpression += "(it.EntryDate >= '" + ViewState["FromDatePicker"].ToString() + "') AND (it.EntryDate <= '" + ViewState["ToDatePicker"].ToString() + "')";
}
TimeReportGrid.MasterTableView.FilterExpression += "(it.EntryDate>= DATETIME '" + ViewState["FromDatePicker"].ToString() + " 00:00') AND (it.EntryDate<= DATETIME '" + ViewState["ToDatePicker"].ToString() + " 23:59')";