2

これは機能します:

    Dim cmdSelect As Data.SqlClient.SqlCommand
    Dim dtr As Data.SqlClient.SqlDataReader
    Dim strSelect As String
    strSelect = "SELECT DISTINCT DVIRDate FROM dbo.tblDVIR " _
        & "WHERE (DVIRDate > DATEADD(day, - 30, { fn NOW() }))"
    cmdSelect = New Data.SqlClient.SqlCommand(strSelect, ConDB)
    ConDB.Open()
    dtr = cmdSelect.ExecuteReader()
    'Bind to Repeater
    Repeater1.DataSource = dtr
    Repeater1.DataBind()
    dtr.Close()
    ConDB.Close()

   <asp:Repeater ID="Repeater1" runat="server" >
   <ItemTemplate>  
   <%# DataBinder.Eval(Container.DataItem, "DvirDate")%>
   <br />
   </ItemTemplate>
   </asp:Repeater>

しかし、これはしません:

    Dim db As New DataContext
    Dim sel = From a In db.tblDVIRs _
              Where a.DVIRDate > DateAdd(DateInterval.Day, -30, Now()) _
              Select a.DVIRDate _
              Distinct

    Repeater1.DataSource = sel
    Repeater1.DataBind()

「DataBinding:'System.DateTime'に'DvirDate'という名前のプロパティが含まれていません」というHttpExceptionが発生します。

興味深いことに、自動生成された列= trueでグリッドビューにバインドすると、それが機能し、列の名前は「アイテム」になります。

で正しい表現を使用していないのですか、databinder.evalそれとも何か間違ったことをしているのですか?これはLinqでは簡単なはずです。私はで考えられるすべてのことを試しましたdatabinder.eval()。何かが足りないに違いありません。

4

1 に答える 1

0

この 2 つのケースには違いがあります。最初のものは a をバインドしているDataReaderため、Evalメソッドは機能する reader("DvirDate") のようにそれを使用しています。2 つ目は、構造体の配列を作成することDateTimeです。この配列には、という名前のプロパティがあるItemため、列を自動生成するとこの列名が付けられますが、各項目は であり、DateTimeDvirDate という名前のプロパティはありません。

次の 2 つの方法で解決できます。

  1. プロパティ「DvirDate」を含む型を作成します。

    Dim sel = From a In db.tblDVIRs _ Where a.DVIRDate > DateAdd(DateInterval.Day, -30, Now()) _ Select New With {.DVIRDate = a.DvirDate} _ Distinct

  2. データバインディング式を次のように変更します。

    <%# Container.DataItem %>

于 2012-10-29T12:37:27.270 に答える