代码之家  ›  专栏  ›  技术社区  ›  Sam Cogan

向ListView动态添加控件

  •  0
  • Sam Cogan  · 技术社区  · 14 年前

    我有一个ASP.NET ListView。填充它的数据按组进行排序,我在ListView项模板中使用了一些代码,这些代码基本上检查数据中的分组字段是否发生了更改,如果发生了更改,它将打印一个新的行和标题,因此看起来有点像这样:

    <ItemTemplate>
    <%# AddGroupingRowIfWPHasChanged() %>
    
        <tr id="row" class="GridViewRow" runat="server" >
        <td valign="top" align="left"  ><%# Eval("item1") %></td>
    .......
    </itemTemplate>
    

    这很管用。但是现在我需要在“组标题”字段中添加一个按钮,而我似乎无法使其正常工作。显然,此按钮仅在标题更改时需要添加,但addGroupingRowIfwphasChanged()方法似乎没有访问当前ListViewItem的权限,因此无法添加控件。

    关于如何将控件动态添加到列表视图中有什么建议吗,这取决于它是否为组标题?

    4 回复  |  直到 14 年前
        1
  •  1
  •   Ian Jacobs    14 年前

    在codebehind中重写itemInserting事件并从中执行可能更容易。

        2
  •  1
  •   Kyle B.    14 年前

    使用占位符?

    ASPX

    <asp:Placeholder id="plhControlHolder" runat="server" />
    

    代码落后

    ' ** use FindControl if instead a databound event, otherwise you could skip.
    Dim plcControlHolder as PlaceHolder = e.Row.FindControl("plcControlHolder") 
    Dim btnDynamic As New Button
    btnDynamic.Id = "MyButton"
    plcControlHolder.Controls.Add(btnDynamic)
    
        3
  •  0
  •   Ryan    14 年前

    尝试使用 GroupTemplate GroupSeparatorTemplate 而不是尝试将其全部放入项模板中。

        4
  •  0
  •   Ryan    14 年前

    创建一个UserControl来代替AddGroupingRowFiwPhasChanged()方法调用。重写render()。如果组已更改,则使用当前位于addGroupingRowIfwPhasChanged()中的逻辑呈现控件;否则,呈现空字符串。