LinqDataSource和DateTime格式

时间:2009-05-27 13:27:53

标签: asp.net sql linq linq-to-sql

我正在尝试创建一个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 &gt;= @DateField">
    <WhereParameters>
        <asp:Parameter DefaultValue="DateTime.Now" Name="DateField" 
            Type="DateTime" />
    </WhereParameters>
</asp:LinqDataSource>

当我尝试运行它时,我收到一个格式异常,说“该字符串未被识别为有效的DateTime”。但是,我的数据库中的日期似乎没问题,因为DateTime.Parse可以完美地运行它们。 DateField的类型为datetime in SQL。

我在这里缺少什么?

谢谢!

3 个答案:

答案 0 :(得分:3)

DefaultValue是其他人建议的代码错误。

但是,请将DefaultValue设置为

 "<%# DateTime.Now %>"
像Andomar建议的那样(这会使标记看起来像这样:

<WhereParameters>
                <asp:Parameter DefaultValue="<%# DateTime.Now %>" Name="DateField" Type="DateTime" />
</WhereParameters>

不起作用,因为DataBinding表达式仅支持具有DataBinding事件的对象,ParameterControlParameter都没有。

对于String,创建TextBox或Label并放置&lt;%#%&gt;相当容易。表达式中该新字段的值(更多详细信息here),但由于将DateTimeTime与.NET DateTime进行比较导致异常,因此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();

答案 1 :(得分:1)

我怀疑它在DefaultValue上失败了。

答案 2 :(得分:1)

尝试:

DefaultValue="<%# DateTime.Now %>"