如何改变数据列表的列数(Webforms, c#)

本文关键字:Webforms 数据 何改变 改变 列表 | 更新日期: 2023-09-27 18:02:12

我做了一个web应用程序,查询的数据库,并返回结果在一个数据。

用户可以指定返回哪些列。对于Datalist,我这样做了:

        <asp:DataList runat="server" ID="list">
        <ItemTemplate>
            <%# DataBinder.Eval(Container.DataItem, columns[0])%>
            &nbsp &nbsp &nbsp
            <%# DataBinder.Eval(Container.DataItem, columns[1])%>
            &nbsp &nbsp &nbsp
            <%# DataBinder.Eval(Container.DataItem, columns[2])%>
            &nbsp &nbsp &nbsp
            <%# DataBinder.Eval(Container.DataItem, columns[3]) %>
            &nbsp &nbsp &nbsp
            <%# DataBinder.Eval(Container.DataItem, columns[4]) %>
            &nbsp &nbsp &nbsp
            <%# DataBinder.Eval(Container.DataItem, columns[5]) %>
        </ItemTemplate>
    </asp:DataList>

如果用户选择7列返回,它将只显示6列,如果用户选择5列返回,它将抛出一个argumentoutofrangeexpect。

是否有一种方法可以放入if语句来检查是否需要该列?

谢谢

如何改变数据列表的列数(Webforms, c#)

当将数据绑定到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()

我知道这可能看起来很多,但是一旦你习惯了,这是将数据绑定到这些类型的控件的最简单的方法。如果有任何问题,请告诉我。