2014-05-17 97 views
0

这是我第一次尝试使用列表视图,我花了一天的更好的一部分击败我的头靠墙试图使其工作。我创建了一个列表视图,我试图用来自Oracle数据库的数据填充。我试图使用datareader来填充listview,但我很难使其工作。在listview表单控件中完成这些操作有很多,但对于Web控件来说并没有太多。任何帮助将不胜感激。从datareader填充列表视图控制

我已经能够获得最远的是这样的:

While reader.Read 

    Dim obj As New ListViewDataItem((reader(0)), (reader(1))) 
    lsvGeneratedForms.Items.Add(obj) 

End While 

但这只是让我读2个对象(我需要在4拉),我碰到一个类型转换错误,我的数据库只包含字符串&日期数据类型。

标记为列表视图:

<div class="GeneratedFormsDivStyle" style="height:300px; overflow:scroll"> 
<asp:ListView runat="server" ID="lsvGeneratedForms"> 
    <LayoutTemplate> 
     <table id="tblFormList" border="0" cellpadding="0" cellspacing="0"> 
      <tr style="background-color:#ccdaeb"> 
       <th align="left"> 
       <asp:Label ID="hdrAgreeNo" runat="server" Text="Agreement No"/> </th> 
       <th align="left"> 
       <asp:Label ID="hdrGenDate" runat="server" Text="Date Generated"/></th> 
       <th align="left"> 
       <asp:Label ID="hdrLEAcct" runat="server" Text="Legal Entity Account"/></th> 
       <th align="left"> 
       <asp:Label ID="hdrStatus" runat="server" Text="Status"/></th> 
      </tr> 
      <tr id="itemPlaceholder" runat="server"></tr> 
     </table> 
    </LayoutTemplate> 
    <ItemTemplate> 
     <tr> 
      <td> 
      <asp:Label runat="server" ID="lblAgreeNo"><%#Eval("AGREEMENT_NUM")%></asp:Label></td> 
      <td> 
      <asp:Label runat="server" ID="lblGenDate"><%#Eval("GEN_DATE")%></asp:Label></td> 
      <td> 
      <asp:Label runat="server" ID="lblLEAcct"><%#Eval("LE_ACCOUNT")%></asp:Label></td> 
      <td> 
      <asp:Label runat="server" ID="lblStatus"><%#Eval("STATUS")%></asp:Label></td>      
     </tr> 
    </ItemTemplate> 
</asp:ListView> 
</div> 
+1

'ListView'是一个数据绑定控件。其概念是每个“项目”对应于绑定数据源中的项目。该“项目”可以有多个属性(字段)。它看起来像你试图在代码后面设置所有的“Item”属性。我建议改变你的方法 - 从你的数据库中创建一个“Items”的集合,并将该集合绑定到ListView。例如,创建一个具有与数据绑定名称匹配的属性的类,构建该类的'List '并将列表绑定到控件。 – Tim

回答

0

为了说明我的例子中,创建一个类:

Public Class MyItem 

    Public Property AGREEMENT_NUM As String 
    Public Property GEN_DATE As String 
    Public Property LE_ACCOUNT As String 
    Public Property STATUS As String 
End Class 

这符合你的<ItemTemplate>被填充的字段。

接下来,您可以将结果从读者的类映射:

Dim myItems As List(Of MyDataItem) = New List(Of MyDataItem)() 

While (reader.Read()) 
    Dim newItem As New MyDataItem With { .AGREEMENT_NUM = reader(0).ToString(), .GEN_DATE = reader(1).ToString(), .LE_ACCOUNT = reader(2).ToString(), .STATUS = reader(2).ToString() } 
    myItems.Add(newItem) 
End While 

然后,你可以绑定列表:

MyListView.DataSource = myItems 
MyListView.DataBind() 

上面的代码是一个例子 - 你需要针对您的代码进行相应调整。重要的是确保您绑定的对象的集合在标记中使用相应的字段名称。

+0

谢谢蒂姆。我在遇到以下行的语法问题: Dim newItem As ListViewDataItem With {.AGREEMENT_NUM = reader(0).ToString(),.GEN_DATE = reader(1).ToString(),.LE_ACCOUNT = reader (2).ToString(),.STATUS = reader(3).ToString()} 我得到'预期的结束'错误...我有什么错误? – StephenT

+0

@StephenT - 如果'ListViewDataItem'来自'System.Web.UI.Controls',那么你不能做你想做的事情,因为编译器不会理解这些属性。您需要使用我在示例中给出的自定义类。请注意,我的例子中有一个拼写错误(我不经常做VB.NET) - 它应该是'Dim newItem As New MyDataItem ....' - 它缺少'New'关键字。 – Tim