我创建了一个Web应用程序,它查询数据库并将结果返回给Datalist。
用户可以指定要返回的列。对于Datalist,我已经这样做了:
<asp:DataList runat="server" ID="list">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, columns[0])%>
     
<%# DataBinder.Eval(Container.DataItem, columns[1])%>
     
<%# DataBinder.Eval(Container.DataItem, columns[2])%>
     
<%# DataBinder.Eval(Container.DataItem, columns[3]) %>
     
<%# DataBinder.Eval(Container.DataItem, columns[4]) %>
     
<%# DataBinder.Eval(Container.DataItem, columns[5]) %>
</ItemTemplate>
</asp:DataList>
如果用户选择7列返回它只会显示6,如果用户选择5列返回它将会抛出ArgumentOutOfRangeExpection。
有没有办法设置if语句来检查它是否需要该列?
谢谢
答案 0 :(得分:0)
将数据绑定到datalist / gridview / repeater时,更容易创建对象列表并将其绑定到控件。以下是使用gridview的示例:
<asp:GridView ID="GridView1" runat="server" AllowSorting="False"
AutoGenerateColumns="false" BackColor="White"
BorderWidth="2px" BorderStyle="Solid"
CellPadding="4" ForeColor="#333333" GridLines="both"
EmptyDataText="No Log Messages">
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<Columns>
<asp:TemplateField Visible="false" ItemStyle-HorizontalAlign="Center" HeaderText="ID" HeaderStyle-ForeColor="white">
<ItemTemplate>
<asp:Label ID="lblId" runat="Server" Text=' <%#Eval("ID")%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField Visible="false" ItemStyle-HorizontalAlign="Center" HeaderText="Address" HeaderStyle-ForeColor="white">
<ItemTemplate>
<asp:Label ID="lblAddress" runat="Server" Text=' <%#Eval("Address1")%>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
此示例创建一个包含两列的表。每列都希望相应的数据源具有名称为:ID和Address1的列。在服务器端,您创建一个对象列表,其中包含具有这些名称的列,并将数据源绑定到控件。像这样:
首先,使用您的属性创建一个类:
Public Class myClassAddress
Public Property ID As String
Public Property Address1 As String
End Class
现在,在您拥有gridview的代码中,实例化该类并填充它:
Dim myList As New List(Of myClassAddress)
Dim newClass As myClassAddress
newClass = New myClassAddress
newClass.Address1 = "some address"
newClass.ID = "1"
myList.Add(newClass)
newClass = New myClassAddress
newClass.Address1 = "some address2"
newClass.ID = "12"
myList.Add(newClass)
当然,在这个例子中,我只是对值进行硬编码。您可以使用数据库,xml文件等中的数据填充类。上面的示例创建了myClassAddress类的两个实例。它还会创建这些类的列表,并将每个实例添加到该列表中。现在,只需将列表绑定到您的控件:
me.gridView1.datasource = myList
me.gridview1.bindData()
我知道这可能看起来很多但是一旦你习惯了它,它就是将数据绑定到这些类型控件的最简单方法。如果您有任何疑问,请与我们联系。