Как изменить количество столбцов в DataList (Webforms, C#)
Я сделал веб-приложение, которое запрашивает базу данных и возвращает результаты в 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, чтобы проверить, нужен ли ему этот столбец?
Спасибо
1 ответ
При привязке данных к списку данных / сетке / ретранслятору проще создать список объектов и связать их с элементом управления. Вот пример использования 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()
Я знаю, что это может показаться много, но как только вы к этому привыкнете, это самый простой способ привязать данные к этим типам элементов управления. Если у вас есть какие-либо вопросы, дайте мне знать.