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

我收到一个 HttpException,“DataBinding:'System.DateTime' 不包含名为 'DvirDate' 的属性。”

有趣的是,当我绑定到具有自动生成的列 = true 的网格视图时,它可以工作并且该列被命名为“项目”

我只是没有在 the 中使用正确的表达databinder.eval或做其他错误的事情吗?这在 Linq 中应该很容易,我已经尝试了我能想到的一切databinder.eval(),我一定错过了一些东西。

4

1 回答 1

0

这两种情况是有区别的。第一个是绑定 aDataReader所以该Eval方法使用它,就像 reader("DvirDate") 一样有效。第二个是创建一个DateTime结构数组。这个数组有一个名为的属性Item,所以自动生成列会带来这个列名,但是每个项目都是一个DateTime并且没有一个名为 DvirDate 的属性。

您可以通过两种方式解决它:

  1. 创建一个包含属性“DvirDate”的类型。

    Dim sel = 从一个 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 回答