2009-05-27 60 views
3

我试图创建一个LinqDataSource绑定到ASP.NET窗体中的DropDownList。我只想根据日期显示元素(这是数据库中的一个字段)。LinqDataSource和日期时间格式

基本上,我想要展示的元素是将在期货中发生的元素(即在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是SQL中的datetime类型。

我在这里错过了什么?

谢谢!

回答

3

DefaultValue得的是什么错误的代码是由别人建议。

然而,设置DefaultValue

"<%# DateTime.Now %>" 

像Andomar建议(这会使标记看起来像这样:

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

将无法​​工作或者是因为数据绑定表达式仅支持对象有一个DataBinding事件,ParameterControlParameter都没有。

对于字符串而言,创建文本框或标签并将<%#%>表达式置于该新字段的值(更多详细信息here)中是相当容易的,但它与DateTime值相比稍微复杂一些,因为比较带有.NET DateTime的SQL 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

我怀疑它在DefaultValue上失败。

1

尝试:

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

把我在正确的方向进行。但是,您无法在参数上使用表达式。查看我的答案了解更多详情。 – 2009-05-28 02:07:29