如何根据许可证类型动态切换ASP.NET ListView列的显示内容
ASP.NET ListView 根据许可证类型动态显示日期或输入框
方法一:前台绑定Visible属性(简洁直观)
- 在后台代码中添加判断方法,根据许可证类型决定是否显示输入框:
protected bool ShouldShowTextBox(object permitType) { // 替换为你的实际业务判断逻辑,比如根据类型名称或ID判断 // 示例:当许可证类型为"临时许可证"时显示输入框 string typeDesc = permitType.ToString(); return typeDesc.Equals("临时许可证", StringComparison.OrdinalIgnoreCase); // 若用ID判断: // int typeId = Convert.ToInt32(permitType); // return typeId == 3; }
- 修改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事件(更灵活,适合复杂逻辑)
- 给ListView添加
OnItemDataBound事件绑定:
<asp:ListView runat="server" ID="lsvPermits" ItemPlaceholderID="itemApplication" DataKeyNames="PERMIT_TYPE_ID" style="width:100%" OnItemDataBound="lsvPermits_ItemDataBound">
- 修改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>
- 在后台实现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
相关产品推荐
相关产品推荐

