You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据许可证类型动态切换ASP.NET ListView列的显示内容

ASP.NET ListView 根据许可证类型动态显示日期或输入框

方法一:前台绑定Visible属性(简洁直观)

  1. 在后台代码中添加判断方法,根据许可证类型决定是否显示输入框:
protected bool ShouldShowTextBox(object permitType)
{
    // 替换为你的实际业务判断逻辑,比如根据类型名称或ID判断
    // 示例:当许可证类型为"临时许可证"时显示输入框
    string typeDesc = permitType.ToString();
    return typeDesc.Equals("临时许可证", StringComparison.OrdinalIgnoreCase);
    
    // 若用ID判断:
    // int typeId = Convert.ToInt32(permitType);
    // return typeId == 3;
}
  1. 修改ListView的ItemTemplate,把日期文本放到Label控件中,并为Label和TextBox绑定Visible属性:
<td valign="middle" style="white-space: nowrap; text-align:center;">
    <!-- 显示日期文本的Label,不满足条件时显示 -->
    <asp:Label ID="lblDate" runat="server" 
        Text='<%# CheckNull(Eval("PERMIT_Date")) %>'
        Visible='<%# !ShouldShowTextBox(Eval("PERMIT_TYPE_DESC")) %>'></asp:Label>
    
    <!-- 输入框,满足条件时显示 -->
    <asp:TextBox ID="txtDate" runat="server" 
        Text='<%# CheckNull(Eval("PERMIT_Date")) %>'
        Visible='<%# ShouldShowTextBox(Eval("PERMIT_TYPE_DESC")) %>'></asp:TextBox>
</td>

方法二:利用ListView的ItemDataBound事件(更灵活,适合复杂逻辑)

  1. 给ListView添加OnItemDataBound事件绑定:
<asp:ListView runat="server" ID="lsvPermits" 
    ItemPlaceholderID="itemApplication" DataKeyNames="PERMIT_TYPE_ID" 
    style="width:100%" OnItemDataBound="lsvPermits_ItemDataBound">
  1. 修改ItemTemplate,为日期文本添加Label控件:
<td valign="middle" style="white-space: nowrap; text-align:center;">
    <asp:Label ID="lblDate" runat="server" Text='<%# CheckNull(Eval("PERMIT_Date")) %>'></asp:Label>
    <asp:TextBox ID="txtDate" runat="server" Text='<%# CheckNull(Eval("PERMIT_Date")) %>'></asp:TextBox>
</td>
  1. 在后台实现ItemDataBound事件逻辑,动态控制控件显示:
protected void lsvPermits_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    // 仅处理数据行
    if (e.Item.ItemType != ListViewItemType.DataItem) return;
    
    ListViewDataItem dataItem = (ListViewDataItem)e.Item;
    // 获取当前行的许可证类型数据(根据你的字段选择ID或描述)
    string permitTypeDesc = DataBinder.Eval(dataItem.DataItem, "PERMIT_TYPE_DESC").ToString();
    // int permitTypeId = Convert.ToInt32(DataBinder.Eval(dataItem.DataItem, "PERMIT_TYPE_ID"));
    
    // 找到目标控件
    Label lblDate = e.Item.FindControl("lblDate") as Label;
    TextBox txtDate = e.Item.FindControl("txtDate") as TextBox;
    
    if (lblDate != null && txtDate != null)
    {
        // 业务判断:比如临时许可证显示输入框,其他显示文本
        if (permitTypeDesc.Equals("临时许可证", StringComparison.OrdinalIgnoreCase))
        {
            lblDate.Visible = false;
            txtDate.Visible = true;
        }
        else
        {
            lblDate.Visible = true;
            txtDate.Visible = false;
        }
    }
}

注意事项

  • 确保你的CheckNull方法能正确处理PERMIT_Date为空的情况,避免页面报错。
  • 两种方法的核心都是根据许可证类型的条件判断,请将示例中的判断逻辑替换为符合你业务需求的规则。
  • 若后续需要获取输入框的值,记得在回发时遍历ListView的行来获取TextBox控件的值。

内容的提问来源于stack exchange,提问作者Ann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:42:54