任何人都不会知道的一种方式隐藏在一个asp.net 列表视图?
题
我知道你可以把 <%,如果%>发言ItemTemplate隐藏的控制,但列仍然存在。你不能把 <%%>的发言到LayoutTemplate其是其中所列标题宣布,因此这个问题。任何人都不会知道的一个更好的办法?
解决方案
这里是另一个解决方案,我只是做了,看到我明白什么你想要做的:
这是你的ASCX/ASPX
<asp:ListView ID="ListView1" runat="server" DataSourceID="MyDataSource" ItemPlaceholderID="itemPlaceHolder" OnDataBound="ListView1_DataBound">
<LayoutTemplate>
<table border="1">
<tr>
<td>Name</td>
<td>Age</td>
<td runat="server" id="tdIsSuperCool">IsSuperCool</td>
</tr>
<asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td><%# Eval("Name") %></td>
<td><%# Eval("Age") %></td>
<td runat="server" id="myCol" visible='<%# (bool)Eval("IsSuperCool") %>'>true</td>
</tr>
</ItemTemplate>
</asp:ListView>
<asp:ObjectDataSource
ID="MyDataSource"
runat="server"
DataObjectTypeName="BusinessLogicLayer.Thing"
SelectMethod="SelectThings"
TypeName="BusinessLogicLayer.MyObjectDataSource" />
这里的代码隐藏
/// <summary>
/// Handles the DataBound event of the ListView1 control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
protected void ListView1_DataBound(object sender, EventArgs e)
{
ListView1.FindControl("tdIsSuperCool").Visible = false;
}
做你想做的,在数据绑定的.因为列现在是目前服务器,并正在处理的数据绑定的控制的,当你做ListView1.FindControl("tdIsSuperCool")你在的布局模板,以便就像一个冠军。
把任何商业逻辑,你想要控制的可见度td和你好。
其他提示
尝试使用面板,你可以把它on/Off
foreach (ListViewItem item in ListView1.Items)
{
((Panel)item.FindControl("myPanel")).Visible= False;
}
列表视图让你完全控制关于如何将数据呈现给客户。你指定的布局模板,并给予符将其中每个项目注入。
输出的以下会给你一个表,以及每个项目将是一个新的TR。
注意到利用运行='服务器和 visible ='<%# %>'
<asp:ListView ID="ListView1" runat="server" DataSourceID="MyDataSource" ItemPlaceholderID="itemPlaceHolder">
<LayoutTemplate>
<table>
<asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td runat="server" id="myCol" visible='<%# (bool)Eval("IsSuperCool") %>'>
<%# Eval("SuperCoolIcon") %>
</td>
<td>
<%# Eval("Name") %>
</td>
<td>
<%# Eval("Age") %>
</td>
</tr>
</ItemTemplate>
</asp:ListView>
我知道这是一个非常古老的问题,但实际上,我有做到这一点,我想我发现了一个相当好的方式做到这一通过能力和css。
增加以下标题:
<script type="text/javascript" src="Scripts/jquery-1.7.1.min.js" ></script>
<style>
.hide {
display:none;
}
.show {
display:block;
}
</style>
所有列要隐藏,添加一个自定义酒店的td/日。
<th runat="server" data-prop='authcheck' id="tdcommentsHeader" >Comments</th>
我建议使用一个定义属性的,因为,长话短说,它可以杀死一堆鸟一石。你甚至不需要改变价值为每一列,因为如果我们基本上id财产。
接下来,确保有一个隐藏的领域,告诉让你知道是否或不隐藏柱。这可以是一个asp:HiddenField或任何其他所以只要它在形成。
<asp:HiddenField runat="server" ID="IsAuthorized" Value="false" />
最后,底部的网页,做到:
<script type="text/javascript">
$(document).ready(function () {
var isauth = $("[id='IsAuthorized']").val();
if (isauth==="false") {
$("[data-prop='authcheck']").addClass('hide');
//$("[id*='tdcomments']").addClass('hide');
}
});
</script>
你总是可以设置列宽度为0(zero)如果你找不到更好的方式。
列表视图并不真正具有一个概念列',因为它是目的只是,嗯,一个列表。
我会假设你正在使用数据绑定附加一个列表中的'有些事情'的列表视图。如果是这种情况,那么你将仅有的一个列表中的项目和html在LayoutTemplate会决定只是如何将这些项目都显示出来。如果你是那么谈论建立一个表格列的行列,那么也许一个数据网将是一个更好的选择,因为这使更多的方案控制的特定列。
这可能是因为你是希望创建表的布局完全通过CSS,这是一个令人钦佩的决定 如果 它纯粹是出于布局的目的。但是,你需要具体隐藏的一列表示我,一个表更好地满足你的需要。这很好的使用表格以表格的数据...恕我直言...
如果你真的需要用一个列表视图然后你可以尝试总结合反对的东西在你的数据,确定是否件应显示或不,例如:
style='display: <%#Eval("DisplayStyle") %>;'
把这码内html元,你想要控制(在LayoutTemplate).那么在对象都具有约束力你会需要一个属性'DisplayStyle',这是设置为"阻止"或"无"。
访问的布局模板列标题的文本,我们标签的模板,并没有一个findcontrol在预呈现的列表视图,然后做成标签的空白文如果列应该是"关闭"。这可能不起作用你的意图,但我仍然希望列空间使用,就会出现空白。
你去尝试做一个列表视图浑,你就希望你用一个网格,而不是。