如何动态设置 ASP.net 超链接字段的可见性

How to set visibility of ASP.net hyperlinkfield dynamically

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

我尝试 <asp:HyperLinkField....Visible="<%= Eval(Condition) %>" /> 我的 SQL 查询中的条件为真或假。

这当然会引发错误 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? 和其他类似问题中了解到这一点。

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

我的建议是在代码隐藏中处理它,最有可能处理 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

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

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

相反,您想使用 TemplateFieldHyperLink,并且 仅隐藏一个 link (保留 table 单元格本身)。例如,

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

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