我有一个带有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?和其他类似的问题中理解这一点。
我现在的问题是:解决方法是什么?如何根据我的情况显示或不显示超链接?
答案 0 :(得分:1)
我的建议是在代码隐藏中处理它,最有可能处理RowCreated事件,并在那里设置控件的Visible属性。你的应用程序可能有更多的上下文我缺少,但这似乎是最简单的方法。
如果不符合您的需求,gridview上的其他事件:https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview_events%28v=vs.110%29.aspx
答案 1 :(得分:1)
您无法在运行时更改 HyperLinkField 可见,因为它没有 DataBinding 事件。
相反,您不应该更改HyperLinkField的可见值。问题是如果隐藏单个单元格,则列的其余部分将无法正确对齐。
相反,您希望使用 TemplateField 和 HyperLink ,仅隐藏链接 (单独保留表格单元格) 。例如,
<asp:TemplateField>
<ItemTemplate>
<asp:HyperLink ID="ConditionHyperLink" runat="server"
Visible='<%# Convert.ToBoolean(Eval("Condition")) %>'
Text="Link" />
</ItemTemplate>
</asp:TemplateField>
仅供参考:您的语法不正确;它应该是='<%# Eval("") %>'