【问题标题】:How to set visibility of ASP.net hyperlinkfield dynamically如何动态设置 ASP.net 超链接字段的可见性
【发布时间】:2015-04-21 12:26:21
【问题描述】:

我有一个内部带有 ASP.net 超链接字段的 DataGridView。我要做的不是根据条件显示某个超链接。我有确定是否应该隐藏超链接的 SQL,但我无法让它在超链接中工作。

我尝试了<asp:HyperLinkField....Visible="<%= Eval(Condition) %>" />,我的 SQL 查询中的条件是 True 或 False。

当然会抛出错误Cannot create an object of type 'System.Boolean' from its string representation '<%= Eval(Condition)%>' for the 'Visible' property

所以我从Why will <%= %> expressions as property values on a server-controls lead to a compile errors? 和其他类似问题中理解了这一点。

我现在的问题是:解决方法是什么?如何根据我的情况显示或不显示超链接?

【问题讨论】:

    标签: c# asp.net datagridview hyperlink webforms


    【解决方案1】:

    您不能在运行时更改 HyperLinkField 的 Visible,因为它没有 DataBinding 事件。

    相反,您不应更改 HyperLinkField 的 Visible 值。问题是如果隐藏单个单元格,则列的其余部分将无法正确对齐。

    相反,您想使用 TemplateFieldHyperLink,并且仅隐藏链接 (保留表格单元格本身) 。例如,

    <asp:TemplateField>
        <ItemTemplate>
            <asp:HyperLink ID="ConditionHyperLink" runat="server" 
                Visible='<%# Convert.ToBoolean(Eval("Condition")) %>'
                Text="Link" />
        </ItemTemplate>
    </asp:TemplateField>
    

    仅供参考:您的语法不正确;应该是='&lt;%# Eval("") %&gt;'

    【讨论】:

    • -列对齐问题在这里无关紧要,而仅仅是因为它是我显示/隐藏的唯一最后一列(所以你的方式肯定更易于维护。我想我对&lt;%# %&gt;&lt;%= %&gt; 之间的区别。
    【解决方案2】:

    我的建议是在代码隐藏中处理它,最有可能处理 RowCreated 事件,并在那里设置控件的 Visible 属性。您的应用程序可能有更多我缺少的上下文,但这似乎是最简单的方法。

    这是活动:https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowcreated(v=vs.110).aspx

    gridview 上的其他事件以防不符合您的需求:https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview_events%28v=vs.110%29.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 2013-11-24
      • 2011-04-05
      • 2016-12-18
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多