我无法确定如何根据会话变量控制网格视图中图像的可见性。
<asp:Image runat="server" ID="imgImportedData" Width="20px" Height="20px" ImageUrl="~/images/warning.png" CausesValidation="false" />
我尝试使用Visible='<%# mySessionVariable %>'
但是我收到一条消息,说mySessionVariable不可用。我认为这是因为它在网格中,因为我在后面的代码中使用了这个变量,在gridview之外的页面的另一部分没有任何问题。
编辑:我刚刚在Repeater
控件中意识到这一点,而不是GridView
。
我尝试了这两个并仍然获得The name 'MySession' does not exist in the current context
Visible='<%# (bool)MySession.IsImportedData == "true" ? true : false %>'
Visible='<%# MySession.IsImportedData == "true" ? true : false %>'
答案 0 :(得分:1)
<%#
是一个DataBinding ASP服务器标记。将<%#
更改为<%=
时会发生什么?
如果这不起作用,我建议在RowDataBound
事件中设置列的可见性,如下所示:
MyGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Image imgImportedData = (Image) e.Row.FindControl("imgImportedData");
// Assuming that mySessionVariable isn't already a bool, which it really should be.
imgImportedData.Visible = bool.Parse(mySessionVariable);
}
}
答案 1 :(得分:0)
试试这个:
<asp:Image runat="server" ID="imgImportedData"
Visible='<%# Session["mySessionVariable"] == "foo" ? true : false %>' />
答案 2 :(得分:0)
我让这个工作。谢谢大家的帮助。我在这个页面上找到了一个帮助的例子。
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound.aspx
protected void rptAlternateNames_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
if (e.Item.DataItem != null)
{
Image imageImportedData = ((Image)e.Item.FindControl("imgImportedData"));
if (MySession.IsImportedData)
{
imageImportedData.Visible = true;
}
}
}
}