【问题标题】:How to display panel control based on Listview ItemDataBound value如何根据 Listview ItemDataBound 值显示面板控件
【发布时间】:2014-04-17 15:54:23
【问题描述】:

使用 asp.net 4.0。我有一个带有列表视图的页面。我正在尝试根据当前的 ItemBound 值而不是 itemBound 事件在 listview itemtemplate 中显示某个预定义的面板....

例如,如果 dataItem.Item("DataGapDesc") 值等于“A”,则显示 Panel pnlPanelA,它将有 2 个文本框。如果 dataItem.Item("DataGapDesc") 的值等于“B”,则显示 Panel pnlPanelB,它将有 3 个文本框和一个复选框,依此类推。

这是我当前在 aspx 中的列表视图:

     <asp:ListView ID="EmployeesGroupedByDataField" runat="server" DataSourceID="sqlDataGapsForSelectedemployees" OnItemBound="employeesGroupedByDataField_ItemDataBound">
                <LayoutTemplate>
                    <table id="Table1" runat="server" class="table1">
                        <tr id="Tr1" runat="server">
                            <td id="Td1" runat="server">
                                <table ID="itemPlaceholderContainer" runat="server" >
                                    <tr id="Tr2" runat="server">
                                        <th id="Th1" runat="server" style="text-align:left"><u>
                                            employee</u></th>
                                        <th id="Th2" runat="server" style="width:5%;text-align:center"><u>
                                            # Items Missing</u></th>
                                        <th id="Th3" runat="server"><u>
                                            employee DOB</u></th>
                                        <th id="Th4" runat="server"><u>
                                            Primary Physican</u></th>
                                        <th id="Th6" runat="server" style="width:10%;text-align:center;border-right: thin solid #000000"><u>
                                            Missing Data Item</u></th>
                                        <th id="Th5" runat="server" style="text-align: center;"><u>
                                            Last Known Visit/Service</u></th>                                
                                        <th id="Th7" runat="server" style="text-align: center;"><u>
                                            Data Entry</u></th>      
                                    </tr>
                                    <tr ID="itemPlaceholder" runat="server">
                                    </tr>
                                </table>
                            </td>
                        </tr>
                        <tr id="Tr3" runat="server">
                            <td id="Td2" runat="server" style="">
                            </td>
                        </tr>
                    </table>
                </LayoutTemplate>
                <ItemTemplate>
                    <%# AddGroupingRowIfemployeeHasChanged()%>               
                            <td style="text-align: right;border-right: thin solid #000000"><%# Eval("DataGapDesc")%>&nbsp</td>
                            <td style="text-align: left;">
                                <%#Eval("ServiceDate")%> 
                                &nbsp-&nbsp
                                <%# Eval("PlaceOfService")%>
                            </td>  
                            <td>
                                <%# DisplaySpecificPanel()%>                                   
                            </td>                                                                                                                                                        
                        </tr>
                </ItemTemplate>
            </asp:ListView>

我正在调用函数 DisplaySpecificPanel(),这是我“尝试”执行此行为的地方。 VB中的那个函数:

公共函数 DisplaySpecificPanel() As String

    Dim currentEmployeeNameValue As String = Trim(Eval("Employee").ToString().Substring(0, (Eval("Employee").ToString.Length) - 10).ToString())

    If currentEmployeeNameValue = "DOE, JOHN" Then
        'Panel1.Visible = True
        Return String.Format("<asp:Button ID=""Button1"" runat=""server"" Text=""Button"" />")
    Else
        Return String.Format("<asp:TextBox ID=""TextBox1"" runat=""server""></asp:TextBox>")

    End If

结束函数

现在,我只是通过根据值添加文本框或按钮来尝试此功能,但从长远来看,我希望添加面板... 好吧,我的函数被正确调用了,但是控件没有被放置在呈现的列表视图上。

有什么想法吗?我打算这样做对吗?非常感谢...

【问题讨论】:

    标签: vb.net listview asp.net-4.0 web-controls


    【解决方案1】:

    从另一个来源找到这个。有道理,但我并不完全精通 aspx 页面的生命周期或行为。

    您将无法使用字符串呈现服务器端控件 控件的表示。该方法适用于纯 HTML 控制。但是,服务器端控件需要经过渲染 仅设置 text 属性时不会调用的机制 一个控件。更好的选择是只保留一个面板 项目模板并在项目数据绑定中动态添加控件 基于条件的事件。然后,您可以检查某些条件是否为 true 然后相应地添加文本框或按钮。如果也有 很多控件,你也可以使用 UserControls。但是,动态控制 不会在页面回发中保留,您需要添加 他们以相同的身份返回。如果你不想处理这一切 创建机制,你可以只保留两个独立的面板和 根据某些条件更新可见性。

    在列表视图中:

    <td>                                                                       
        <asp:Panel runat="server" ID="pnlOne" Visible='<%# CanShowFirstPanel()%>'>
            <asp:Button ID="Button1" runat="server" Text="Button" />
        </asp:Panel>
        <asp:Panel runat="server" ID="pnlTwo" Visible='<%# CanShowSecondPanel()%>'>
            <asp:TextBox runat="server" ID="TextBox1" />
        </asp:Panel>
    </td>
    

    代码隐藏:

    Public Function CanShowFirstPanel() As Boolean
           'condition to check 
           Return True
       End Function
       Public Function CanShowSecondPanel() As Boolean
           'condition to check 
           Return False
       End Function
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      • 1970-01-01
      • 2011-04-02
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      相关资源
      最近更新 更多