我正在尝试创建一个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可以完美地运行它们。 DateField的类型为datetime in SQL。
我在这里缺少什么?
谢谢!
答案 0 :(得分:3)
DefaultValue
是其他人建议的代码错误。
但是,请将DefaultValue
设置为
"<%# DateTime.Now %>"
像Andomar建议的那样(这会使标记看起来像这样:
<WhereParameters>
<asp:Parameter DefaultValue="<%# DateTime.Now %>" Name="DateField" Type="DateTime" />
</WhereParameters>
不起作用,因为DataBinding表达式仅支持具有DataBinding事件的对象,Parameter
或ControlParameter
都没有。
对于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 %>"