基于HiddenField的GridView中的动态图像

时间:2014-06-10 15:15:53

标签: c# asp.net gridview

我在网格中遇到动态图像问题。 我想在HiddenField中为每个不同的Id可视化不同的图像。

代码是:

<asp:GridView ID="GridViewExample" runat="server" CellPadding="2" >
   <Columns>
       <asp:TemplateField Visible="False">
           <ItemTemplate>
              <asp:HiddenField ID="HiddenId" runat="server" Value='<%#Bind("id") %>' />
           </ItemTemplate>
       </asp:TemplateField>
       <asp:TemplateField>
           <ItemTemplate>
               <asp:LinkButton ID="ImageButtonLink" runat="server">
                   <asp:Image ID="image" runat="server" ImageUrl='DYNAMIC_URL' />
               </asp:LinkButton>
           </ItemTemplate>
       </asp:TemplateField>
   </Columns>                    
</asp:GridView>

我尝试使用ImageUrl中的方法。 问题是我使用ImageUrl="<%#test(<%#Bind("id") %>)%>"并且它不起作用,因为我使用了两个<%#并且它读取了一个。

测试代码(当然Id是int):

protected string test(int x) {
   if(x == 1)
        return "~/Images/black.png";
   else
        return "~/Images/white.png";
}

如何为其他ID设置不同的网址?

非常感谢

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作(您不需要第二个哈希#):

  <asp:Image ID="image" runat="server" ImageUrl = '<%# test(Eval("Id")) %>' />

或者,如果您想为每一行更改它,请在gridview的RowDataBound事件中执行:

if(e.Row.Rowtype == DataControlType.DataRow)    
{
     Image imgage = (Image)e.Row.FindControl("Image");    
     image.IamgeURl =  //your URL;
}

答案 1 :(得分:0)

尝试以下代码

 <asp:GridView ID="GridViewExample" runat="server" CellPadding="2">
        <Columns>
            <asp:TemplateField Visible="False">
                <ItemTemplate>
                    <asp:HiddenField ID="HiddenId" runat="server" Value='<%#Bind("id") %>' />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:LinkButton ID="ImageButtonLink" runat="server">
                        <asp:Image ID="image" runat="server" ImageUrl='<%# Eval("id").ToString().Trim()=="1"?"~/Images/black.png":"~/Images/white.png" %>' />
                    </asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>