【问题标题】:Add row of data to ListView VB.Net将数据行添加到 ListView VB.Net
【发布时间】:2014-06-13 16:13:11
【问题描述】:

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

我的列表视图是lvChanges


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

第 1 到 4 列:字符串

第 5 列:LinkBut​​ton, CommandName="ApproveChange" - 在代码中处理,但是,我不确定如何为 CommandArgument="?" 中的行传递标识符。我见过很多使用<%# Eval('someKey') %> 的示例它是如何工作的? 我怎样才能传递密钥?我需要只读属性吗?只要我的页面后面的代码有对象,属性可以直接“评估”吗?


我正在尝试添加有错误的项目:“'一维字符串数组'类型的值无法转换为'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

上面的数据,应该进入ItemTemplate中的五个&lt;td&gt;标签,如下

<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,以完成这块的功能。

【问题讨论】:

  • item = New ListViewItem(data) - 传递字符串数组是 WinForms 的正确语法。 Web 控件不同
  • @Plutonix 我明白了,我什至无法创建一个单数 ListViewItem 并将字符串传递给它。它只接受DataItem, EmptyItem, or InsertItem

标签: vb.net listview listviewitem itemtemplate


【解决方案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

【讨论】:

    【解决方案2】:

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

       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() 非常简单

    【讨论】:

      猜你喜欢
      • 2013-05-11
      • 1970-01-01
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      • 2011-08-16
      相关资源
      最近更新 更多