向ListView VB.Net添加数据行

问题描述 投票:0回答:2

我正在尝试将一行数据添加到五列圆柱视图中。我有一个问题,将字符串数组传递给ListViewItem,因为它不接受数据数组。我几乎没有使用这些观点的经验,所以如果有人能指出我做错了什么,那就太好了。

我的列表视图是lvChanges


我有以下设置,是我正确使用ListView的实现吗?

第1列到第4列:字符串

第5列:LinkBut​​ton,CommandName =“ApproveChange” - 在代码中处理,但是,我不知道如何在CommandArgument =“?”中传递行的标识符。我见过许多例子使用<%# Eval('someKey') %>这是如何工作的?我怎么能通过钥匙?我需要一个只读属性吗?只要页面后面的代码有对象,属性是否可以直接“Eval'd”?


我正在尝试添加有错误的项目:“类型的'1维数组的字符串'的值'无法转换为'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,如何让行知道利益相关者ID以完成此作品的功能。

vb.net listview listviewitem itemtemplate
2个回答
1
投票

将其另存为数据表并使用以下代码(确保数据集中没有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

0
投票

技巧是将行添加到列表中并将数据源设置为列表。

   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>

好。简单。 Eval()非常直接

© www.soinside.com 2019 - 2024. All rights reserved.