2009-05-27 10 views
3

J'essaie de créer un LinqDataSource pour lier à un DropDownList dans un formulaire ASP.NET. Je veux seulement montrer les éléments en fonction d'une date (qui est l'un des champs de la base de données). Fondamentalement, les éléments que je veux montrer sont ceux qui vont arriver dans les futurs (c'est-à-dire après DateTime.Now).LinqDataSource et le format DateTime

je tentais le balisage suivant:

<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> 

Je reçois une exception en format disant que « La chaîne n'a pas été reconnu comme un DateTime valide » lorsque je tente de l'exécuter. Cependant, les dates dans ma base de données semblent être bien, car un DateTime.Parse fonctionne parfaitement sur eux. Le champ DateField est de type datetime dans SQL.

Qu'est-ce qui me manque ici?

Merci!

Répondre

3

Le DefaultValue était ce qui était mal avec le code comme cela a été suggéré par les autres.

Cependant, le réglage de la DefaultValue à

"<%# DateTime.Now %>" 

comme Andomar a suggéré (ce qui rendrait le look de balisage quelque chose comme ceci:

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

ne fonctionnera pas, soit parce que les expressions de liaison de données sont prises en charge que sur les objets qui ont un événement DataBinding, et aucun Parameter ou ControlParameter n'en possède un.Pour un String, il est assez facile de créer un TextBox ou un Label et de mettre l'expression <% #%> dans la valeur de ce nouveau champ (plus de détails here), mais c'était un peu plus compliqué avec une valeur DateTime un DateTime SQL avec un .NET DateTime a provoqué une exception.

Il peut se faire assez facilement dans l'événement Page_Load en utilisant

DataContext DataContext1 = new DataContext(); 

    var c = from a in DataContext1.Field 
      where a.DateField >= DateTime.Now 
      select a; 
    DropDownList.DataSource = c; 
    DropDownList.DataBind(); 
1

Je suppose qu'il échoue sur DefaultValue.

1

Essayez:

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

Mettez-moi dans la bonne direction. Cependant, vous ne pouvez pas utiliser une expression sur un paramètre. Voir ma réponse pour plus de détails. –

Questions connexes