Добавить строку данных в ListView VB.Net

Я пытаюсь добавить строку данных в пятиколоночный список. У меня проблема с передачей массива строк в ListViewItem, так как он не принимает массив данных. У меня мало опыта использования этих представлений, поэтому, если бы кто-то мог указать, что я делаю неправильно, это было бы здорово.

Мой список lvChanges


У меня есть следующая настройка, правильно ли моя текущая реализация использует ListView?

Столбец с 1 по 4: строка

Столбец 5: LinkButton, CommandName="ApproveChange" — обрабатывается в коде, однако я не знаю, как передать идентификатор строки в CommandArgument="?". Я видел много примеров использования <%# Eval('someKey') %> Как это работает? Как я могу передать ключ? Нужно ли свойство только для чтения? Пока мой код за страницей имеет объекты, могут ли атрибуты быть напрямую «Eval'd»?


Я пытаюсь добавить элементы с ошибкой в ​​строке: "Значение типа "одномерный массив строк" не может быть преобразовано в "System.Web.UI.WebControls.ListViewItemType"

For i As Integer = 0 To addressList.Count
        Dim item As ListViewItem
        Dim data(5) As String
        data(0) = "Adress Change"
        data(1) = stakeholderList(i).ToString
        data(2) = stakeholderList(i).Address.ToString
        data(3) = addressList(i).ToString
        data(4) = "need the link button here!"
        item = New ListViewItem(data)    ' <-- Error
        lvChanges.Items.Add(item)
    Next

Приведенные выше данные должны помещаться в пять тегов <td> в ItemTemplate, как показано ниже.

<asp:ListView ID="lvChanges" runat="server">
        <LayoutTemplate>
            <table cellpadding="2" width="640px" border="1" ID="tbl1" runat="server">
            <tr id="Tr1" runat="server" style="background-color: #dfdbdf">
                <th runat="server"><%= Type %></th>
                <th runat="server"><%= Requester %></th>
                <th runat="server"><%= OldAddress%></th>
                <th runat="server"><%= NewAddress%></th>
                <th runat="server"><%= Decision%></th>
            </tr>
            <tr runat="server" id="itemPlaceholder" />
          </table>
        </LayoutTemplate>
        <ItemTemplate>
            <tr runat="server" >
                <td></td>
                <td></td>
                <td></td>
                <td>
                    <asp:LinkButton runat="server" 
                    ID="btnApprove" 
                    Text="Approve" 
                    CommandName="ApproveChange"
                    CommandArgument='<%# Eval("?") %>'/>
                </td>
            </tr>
        </ItemTemplate>
    </asp:ListView>

Что касается CommandArgument, как это сделать, чтобы эта строка знала идентификатор заинтересованного лица, чтобы завершить функциональность этой части.


person GivenPie    schedule 13.06.2014    source источник
comment
item = New ListViewItem(data) - передача массива строк является правильным синтаксисом для WinForms. Веб-управление отличается   -  person Ňɏssa Pøngjǣrdenlarp    schedule 13.06.2014
comment
@Plutonix Я вижу, я даже не могу создать единственное число ListViewItem и передать в него строку. Он будет принимать только DataItem, EmptyItem, or InsertItem   -  person GivenPie    schedule 13.06.2014


Ответы (2)


Сохраните его как таблицу данных и используйте следующий код (убедитесь, что в вашем наборе данных нет NULL)

   Public Sub ShowDataInLvw(ByVal data As DataTable, ByVal lvw As ListView)
        lvw.View = View.Details
        lvw.GridLines = True
        lvw.Columns.Clear()
        lvw.Items.Clear()
        For Each col As DataColumn In data.Columns
            lvw.Columns.Add(col.ToString)
        Next

        For Each row As DataRow In data.Rows
            Dim lst As ListViewItem
            lst = lvw.Items.Add(row(0))
            For i As Integer = 1 To data.Columns.Count - 1
                Debug.Print(row(i).ToString)
                lst.SubItems.Add(row(i))
            Next
        Next
    End Sub
person Eddy Jawed    schedule 17.02.2015

Хитрость заключается в том, чтобы добавить строки в список и установить источник данных в качестве списка.

   Private result As New List(Of String())

   For i As Integer = 0 To addressList.Count
        Dim data(5) As String
        data(0) = "Adress Change"
        data(1) = stakeholderList(i).ToString
        data(2) = stakeholderList(i).Address.ToString
        data(3) = addressList(i).ToString
        data(4) = stakeholderList(i).ID
        result.Add(data)
    Next

    lvChanges.DataSource = result
    lvChanges.DataBind()

Затем на странице aspx используйте Eval(), чтобы выбрать индекс элементов в списке, который представляет собой строку строковых данных.

       <ItemTemplate>
            <tr runat="server" >
                <td><asp:Label ID="lblType" runat="server" Text='<%# Eval("[0]") %>'></asp:Label></td>
                <td><asp:Label ID="lblRequester" runat="server" Text='<%# Eval("[1]") %>'></asp:Label></td>
                <td><asp:Label ID="lblOld" runat="server" Text='<%# Eval("[2]") %>'></asp:Label></td>
                <td><asp:Label ID="lblNew" runat="server" Text='<%# Eval("[3]") %>'></asp:Label></td>
                <td>
                    <asp:LinkButton runat="server" 
                    ID="btnApprove" 
                    Text="Approve" 
                    CommandName="ApproveChange"
                    CommandArgument='<%# Eval("[4]") %>'/>
                </td>
            </tr>
        </ItemTemplate>

Ok. просто. Eval() довольно прямолинеен

person GivenPie    schedule 13.06.2014