Listview / DetailsView:隐藏空字段

时间:2009-09-29 14:51:43

标签: asp.net listview detailsview

我想这是一个非常普遍的问题,但到目前为止我还没有找到一个优雅的解决方案。

我有很多实例,我有一个ListView或一个绑定到SQL Server SProc的DetailsView控件。我遇到的问题是,有很多实例,当列为空时,我想在UI中显示不同的内容。一个典型的例子是我有一个URL列,它被渲染为LinkBut​​ton(在ListViews中)或HyperLinkField(在DetailsViews中) - 当返回Null URL时,我正在渲染没有src属性的链接。理想情况下,我希望在这种情况下不显示此字段。

在每种情况下,当返回空值时,如何跳过/更改该项的呈现?

提前致谢。

更新:我没有机会真正尝试这些,但所有有用的建议。我想我喜欢里克斯的答案最好,但再次感谢其他人......

3 个答案:

答案 0 :(得分:2)

<强>标记:

 <asp:HyperLink id="whatever" runat="server" 
  NavigateURL='<%# Eval("url") %>' Visible='<%# IsVisible(Eval("url")) %>' />

代码背后:

protected bool IsVisible(object obj)
{
     bool result = false;

     string url = (string)obj;
     if(!string.IsNullOrEmpty(url))
     {
          result = true;
     }

     return result;

}

答案 1 :(得分:1)

在模板内绑定到可见性

<asp:HyperLink ... NavigateURL=<%# Eval("url") %> Visible=<%# Eval("url") != null %> />

警告:未经测试,也可能是

<asp:HyperLink ... NavigateURL=<%# Eval("url") %> Visible=<%# Eval("url") != DBNull.Value %> />

答案 2 :(得分:1)

我想你可以在你的代码后面创建一个方法,它将值作为参数,如果它不是null,则返回一个链接。或者您可以使用Listview的数据绑定事件,检查值并隐藏控件(如果它为null)。 既不是一个非常优雅的解决方案,但我想这取决于你的决定。 :)