我正在尝试创建一个LinqDataSource来绑定到ASP.NET表单中的DropDownList。我只想根据日期显示元素(这是数据库中的一个字段)。
基本上,我想展示的元素是在未来(即在DateTime.Now之后)将会发生的元素。
我正在尝试下面的标记:
<asp:DropDownList runat="server" ID="DropDownList1"
AppendDataBoundItems="True" DataSourceID="LinqDataSource1"
DataTextField="TextField" DataValueField="ValueField">
</asp:DropDownList>
<asp:LinqDataSource ID="LinqDataSource1" runat="server"
ContextTypeName="DataContext1" TableName="Table"
Where="DateField >= @DateField">
<WhereParameters>
<asp:Parameter DefaultValue="DateTime.Now" Name="DateField"
Type="DateTime" />
</WhereParameters>
</asp:LinqDataSource>当我尝试运行它时,我得到了一个格式异常,说“该字符串未被识别为有效的DateTime”。但是,我的数据库中的日期似乎没问题,因为DateTime.Parse可以很好地处理它们。在SQL中,DateField是datetime类型。
这里我漏掉了什么?
谢谢!
发布于 2009-05-28 02:05:18
正如其他人所建议的那样,DefaultValue是代码的错误所在。
但是,将DefaultValue设置为
"<%# DateTime.Now %>"就像Andomar建议的那样(这将使标记看起来像这样:
<WhereParameters>
<asp:Parameter DefaultValue="<%# DateTime.Now %>" Name="DateField" Type="DateTime" />
</WhereParameters>也不起作用,因为DataBinding表达式仅在具有DataBinding事件的对象上受支持,而Parameter或ControlParameter都没有。
对于字符串,创建TextBox或标签并将<%# %>表达式放入新字段(more details here)的值中相当容易,但使用SQL值要复杂一些,因为将DateTime DateTime与.NET DateTime进行比较会导致异常。
在Page_Load事件中,可以通过使用
DataContext DataContext1 = new DataContext();
var c = from a in DataContext1.Field
where a.DateField >= DateTime.Now
select a;
DropDownList.DataSource = c;
DropDownList.DataBind();发布于 2009-05-27 13:29:42
我怀疑它在DefaultValue上失败了。
发布于 2009-05-27 13:35:07
尝试:
DefaultValue="<%# DateTime.Now %>"https://stackoverflow.com/questions/915694
复制相似问题