Asp.net GridView TemplateField中的条件图像规则

Asp.net GridView TemplateField中的条件图像规则,asp.net,gridview,templatefield,iif,Asp.net,Gridview,Templatefield,Iif,我需要根据GridView中的值在GridView列中显示一个红色/橙色/绿色图标。我已成功显示红色/绿色,但显示橙色图标时遇到问题。当两个值之间的差异在+/-5%之间时,需要显示黄色图标 我的红色/绿色工作代码如下: <asp:TemplateField HeaderText=""> <ItemTemplate> <asp:Image ID="Image3" runat="server" Height="20px" ImageUrl='<%# I

我需要根据GridView中的值在GridView列中显示一个红色/橙色/绿色图标。我已成功显示红色/绿色,但显示橙色图标时遇到问题。当两个值之间的差异在+/-5%之间时,需要显示黄色图标

我的红色/绿色工作代码如下:

<asp:TemplateField HeaderText="">
 <ItemTemplate>
  <asp:Image ID="Image3" runat="server" Height="20px" ImageUrl='<%# 
  IIF((CType(Container,GridViewRow).RowIndex =2),
    IIF((Eval("A") > Eval("B")),
    "~/Images/Icons/iGreen.png", "~/Images/Icons/iRed.png"),
     IIF((Eval("A") > Eval("B")),
     "~/Images/Icons/iRed.png", "~/Images/Icons/iGreen.png")) %>' Width="20px" />
 </ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="">
 <ItemTemplate>
  <asp:Image ID="Image3" runat="server" Height="20px" ImageUrl='<%# 
  IIF((CType(Container,GridViewRow).RowIndex =2),
   IIF( abs((Eval("A") / Eval("B"))-1) < 0.05 ,
   "~/Images/Icons/iOrange.png",
    IIF((Eval("A") > Eval("B")),
    "~/Images/Icons/iGreen.png", "~/Images/Icons/iRed.png"),
     IIF((Eval("A") > Eval("B")),
     "~/Images/Icons/iRed.png", "~/Images/Icons/iGreen.png"))) %>' Width="20px" />
 </ItemTemplate>
</asp:TemplateField>
我也尝试过用(^2)平方代替“绝对值”,但它也不起作用

有什么办法可以让它工作吗


谢谢

你可以试试这个,看起来是IIF的2倍((Eval(“A”)>Eval(“B”)),我去掉了一个

'<%# IIF((CType(Container,GridViewRow).RowIndex =2), IIF( Math.Abs((Eval("A") / Eval("B"))-1) < 0.05 ,"~/Images/Icons/iOrange.png",IIF(Eval("A") > Eval("B"), "~/Images/Icons/iGreen.png", "~/Images/Icons/iRed.png")),"3") %>'
“Eval(“B”),“~/Images/Icons/iGreen.png”,“~/Images/Icons/iRed.png”),“3”)%>”

我已经设法让它工作了。谢谢汉斯的帮助。如果有帮助,请参阅下面的代码:

注意,我添加了+0.00001以防止被零除。用另一个条件嵌套代码仍然会给我带来除法错误(可能是我做错了什么)

此外,在第2行中,我需要反转条件,其中A越小越好(绿色)

IIF(数学绝对值((评估(“A”)/(评估(“B”)+0.00001))-1)<0.05,
“~/Images/Icons/iOrange.png”,
IIF((CType(容器,GridViewRow).RowIndex=2),
IIF((评估(“A”)>评估(“B”),
“~/Images/Icons/iGreen.png”、“~/Images/Icons/iRed.png”
),
IIF((评估(“A”)<评估(“B”)),
“~/Images/Icons/iRed.png”、“~/Images/Icons/iGreen.png”
)
)
)

也许你应该试试数学。对于Math.Abs,我遇到了另一个错误:重载解析失败,因为没有可访问的“IIf”接受这个数量的参数。我设法使它与Math.Abs一起工作。谢谢你,汉斯
'<%# IIF((CType(Container,GridViewRow).RowIndex =2), IIF( Math.Abs((Eval("A") / Eval("B"))-1) < 0.05 ,"~/Images/Icons/iOrange.png",IIF(Eval("A") > Eval("B"), "~/Images/Icons/iGreen.png", "~/Images/Icons/iRed.png")),"3") %>'
IIF( Math.Abs((Eval("A") / (Eval("B")+0.00001))-1) < 0.05, 
  "~/Images/Icons/iOrange.png",
  IIF((CType(Container,GridViewRow).RowIndex =2),
    IIF((Eval("A") > Eval("B")),
    "~/Images/Icons/iGreen.png", "~/Images/Icons/iRed.png"
    ),
    IIF((Eval("A") < Eval("B")),
     "~/Images/Icons/iRed.png", "~/Images/Icons/iGreen.png"
    )
  )
 )