根据另一列的值在GridView列中显示图像

3

我有一个包含复选框列和图像列的网格视图。

现在,如果选择复选框,则图像列应显示绿色勾图像,如果未选中复选框,则应在连续行中显示错误图像图标。

.aspx页面如下:

 <asp:TemplateField HeaderText="Backup Session Status" 
             SortExpression="backupsessionstatus">
             <EditItemTemplate>
                 <asp:CheckBox ID="CheckBox1" runat="server" 
                     Checked='<%# Bind("backupsessionstatus") %>' />
             </EditItemTemplate>
             <ItemTemplate>
                 <asp:CheckBox ID="CheckBox1" runat="server" 
                     Checked='<%# Bind("backupsessionstatus") %>' Enabled="false" />
             </ItemTemplate>
         </asp:TemplateField>



         <asp:TemplateField HeaderText="Backup Session Status">
             <EditItemTemplate>
                 <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
             </EditItemTemplate>
             <ItemTemplate>
                 <asp:Image ID="Image1" runat="server"/>
             </ItemTemplate>
         </asp:TemplateField>

而.cs文件是:

 foreach (GridViewRow myRow in GridView1.Rows)
            {
                Image img1 = (Image)myRow.FindControl("Image1");
                CheckBox chkbox1 = (CheckBox)myRow.FindControl("CheckBox1");
                if (chkbox1.Checked)
                {
                    img1.ImageUrl = "greenimage.jpg";
                }
                else
                {
                    img1.ImageUrl = "redimage.jpg";
                }
            }

该列中没有显示任何图像

请提供一种解决方法... 谢谢


“在连续的行中显示错误的图像图标”?您是指连续的列还是行?您的代码建议使用'column'。贴出的cs代码,它绑定到哪个事件上了? - o.k.w
3个回答

4
感谢您的输入,但我已经得到了答案... 这是如何做到的。
<asp:TemplateField HeaderText="Backup Session Status" 
         SortExpression="backupsessionstatus">
         <EditItemTemplate>
             <asp:CheckBox ID="CheckBox1" runat="server" 
                 Checked='<%# Bind("backupsessionstatus") %>' />
         </EditItemTemplate>
         <ItemTemplate>
             <asp:CheckBox ID="CheckBox1" runat="server" 
                 Checked='<%# Bind("backupsessionstatus") %>' Enabled="false" />
         </ItemTemplate>
     </asp:TemplateField>



     <asp:TemplateField HeaderText="Backup Session Status">
         <EditItemTemplate>
             <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
         </EditItemTemplate>
         <ItemTemplate>
             <asp:Image ID="Image1" runat="server" ImageUrl="~/NewFolder1/1258341827_tick.png"/>
         </ItemTemplate>
     </asp:TemplateField>

这是 .CS 代码。
foreach (GridViewRow myRow in GridView1.Rows)
        {
            Image img1 = (Image)myRow.FindControl("Image1");
            CheckBox chkbox1 = (CheckBox)myRow.FindControl("CheckBox1");
            if (chkbox1.Checked)
            {
                img1.ImageUrl = "~/greenimage.jpg";
            }
            else
            {
                img1.ImageUrl = "~/redimage.jpg";
            }
        }

我了解到在aspx页面中必须提供一个图片URL,并且在后台代码中修改它为任何图片。如果您没有在aspx页面中提供图像URL,则无法正常工作...


我非常确定那不是真的。 - Rex M

1
尝试在GridViewOnRowDataBound事件中切换图像URL。
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    CheckBox chk = (CheckBox)e.Row.FindControl("CheckBox1");
    if (chk != null)
    {
        Image img1 = (Image)e.Row.FindControl("Image1");
        if (chk.Checked)
            img1.ImageUrl = "greenimage.jpg";
        else
            img1.ImageUrl =  "redimage.jpg";
    }
}

1
你是否在调试中逐步执行代码,并确保你的foreach循环按照你的预期运行?始终首先检查显而易见的问题... 你的图像路径是否正确?没有"/"将意味着它正在相对于加载页面的文件夹中寻找图像。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接