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

时间:2015-02-19 22:53:48

标签: c# asp.net datagridview hyperlink webforms

我有一个带有ASP.net超链接字段的DataGridView。我试图做的不是根据条件显示某个超链接。我有SQL来确定是否应该隐藏超链接,但是我无法在超链接中使用它。

我尝试<asp:HyperLinkField....Visible="<%= Eval(Condition) %>" />,我的SQL查询中Condition为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?和其他类似的问题中理解这一点。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

enter image description here

相反,您希望使用 TemplateField HyperLink 仅隐藏链接 (单独保留表格单元格) 。例如,

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

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