我有一个数据中继器正在读取几个不同的字段。但是,某些信息被删除。在这种情况下,我想隐藏这些字段。
我不确定如何最好地解决这个问题。我尝试了以下方法:
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:db %>"
SelectCommand="SELECT GrName, GrRoom
FROM [Group] WHERE GrName LIKE 'A%' ORDER BY GrName && * IS NOT NULL">
</asp:SqlDataSource>
<!-- output to page -->
<div data-role="collapsible-set">
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
<ItemTemplate>
<div data-role="collapsible" data-collapsed="true">
<p>Room: <%# Eval("GrRoom")%></p>
</div>
</ItemTemplate>
</asp:Repeater>
或者,我是否会在头脑中做这样的事情?
<script type="text/vbscript">
If (GrRoom = NULL) Then
display: none;
End If
</script>
我不确定我现在正在抓住这个概念。基本上,我希望以下功能运行:
“如果GrRoom为空,请不要显示”
对此有何想法?我很感激你的见解。我对ASP和.NET比较陌生,所以我还在学习很多东西。
感谢您的时间和帮助。
答案 0 :(得分:2)
<ItemTemplate>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"
Visible='<%# Not [String].IsNullOrEmpty(If(TypeOf Eval("GrRoom") Is DbNull, [String].Empty, DirectCast(Eval("GrRoom"), String))) %>'>
<div data-role="collapsible" data-collapsed="true">
<p>
Room:
<%# Eval("GrRoom")%></p>
</div>
</asp:PlaceHolder>
</ItemTemplate>
的修改
我一开始没有测试它,现在我已经正确测试了这段代码。我现在也在检查空字符串。请试一试。
修改2
我正在使用C#语法,抱歉,现在用VB编辑
修改3
我添加了DbNull检查
答案 1 :(得分:1)
如果您的目标不是在该字段为空的情况下检索所有数据,那么您的SQL语法很接近,但需要进行调整:
SELECT GrName, GrRoom
FROM [Group]
WHERE GrName LIKE 'A%'
AND IsNull(GrRoom, '') <> ''
ORDER BY GrName
“* is not null”无效 - IS NOT NULL必须引用单个值,*引用结果集中使用的收集表中的所有列。
&安培;&安培;也不是有效的WHERE结构 - 你必须使用“AND”和“OR”而不是&amp;&amp;和||
您的WHERE条件必须在 ORDER BY子句
之前发生最后 - 像'A%'会自动过滤掉空值,因为null不能像某个值那样。
因此,如果您使用sql,因为我已经编写了它,这将确保始终填充GrName,因此在ASP方面,不需要显示/隐藏控件的逻辑。
当然也有理由显示/隐藏控件 - 但是如果你可以从发送到服务器的数据中消除不需要的行,那么整体流量就会减少,“尽可能少的可能”总是一个目标在数据传输方面。