基于HiddenField的GridView动态图像

本文关键字:动态 图像 GridView HiddenField 基于 | 更新日期: 2023-09-27 18:08:12

我在网格中有一个动态图像的问题。我想在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设置不同的url ?

非常感谢

基于HiddenField的GridView动态图像

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

  <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;
}

试试下面的代码

 <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>