我正在使用ASP.NET C#,我必须做这样的事情:
<asp:TemplateField
HeaderText="text"
ItemStyle-HorizontalAlign="Center"
ItemStyle-CssClass="ddl_Class_new">
<ItemTemplate>
<% if (Eval("dOR_4").ToString().Equals("R"))
{ %>
<asp:ImageButton ID="btn"
ImageUrl="/Img/bullett/redbul.gif"
runat="server" />
<% }
else if (Eval("dOR_4").ToString().Equals("G"))
{ %>
<asp:ImageButton ID="btn"
ImageUrl="/Img/bullett/goldbul.gif"
runat="server" />
<% }
else if (Eval("dOR_4").ToString().Equals("V"))
{ %>
<asp:ImageButton ID="btn"
ImageUrl="/Img/bullett/forestbul.gif"
runat="server" />
<% } %>
</ItemTemplate>
</asp:TemplateField>
但我得到错误"Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control."
我已经尝试使用下面的代码,但我没有看到goldbul.gif
<asp:TemplateField
HeaderText="text"
ItemStyle-HorizontalAlign="Center"
ItemStyle-CssClass="ddl_Class_new">
<ItemTemplate>
<asp:ImageButton ID="btn"
ImageUrl='<%# Eval("dOR_4").ToString().Equals("R") ?
"/Img/bullett/redbul.gif" :
Eval("dOR_4).ToString().Equals("G") ?
"/Img/bullett/goldbul.gif" : "/Img/bullett/forestbul.gif" %>'
runat="server" />
</ItemTemplate>
</asp:TemplateField>
任何帮助真的很感激
通过使用具有EVAL函数的IF ELSEIF ELSE条件
1条答案
按热度按时间h5qlskok1#
实际上,不要尝试在页面标记中编写或包含这些代码。这是一个烂摊子,更糟糕的是,无论如何都会让你的生活变得悲惨。
由于网格视图是一个服务器端控件,因此您有“许多”选择来编写一些干净的代码来处理您的示例用例。
是gridview、listview、repeater还是许多其他数据绑定控件?
它们都有一个行数据绑定事件。因此,该事件不仅简单,而且是您的“go to”代码位,用于格式化,隐藏/显示控件,甚至做突出显示,颜色等事情。
甚至更好?
该事件在绑定事件期间具有FULL数据库行。换句话说,对于您甚至不“显示”或包括在网格视图中的列?您仍然可以使用这些列!因此,您可能有一个税收计算,但不需要或不想显示税率。
或者甚至是一个简单的酒店列表,你有一个布尔的“活跃”列,对于任何活跃的酒店,你可以把那行数据涂成“浅蓝色”或类似的颜色。(但是,真实的的好处是活跃列不必出现在标记中!!!)。
所以,对于这样的目标,使用行数据绑定事件。你会发现它不仅有一百万个用例,而且意味着你不需要将混乱的标记与一些代码混合在一起。
所以,你的案子?
然后我建议使用行数据绑定事件。
所以,说这个标记:
我们有一个图像按钮。
我有一个PassedTest列(值2 =好,1 =坏,0 =无状态)。
因此,我在行数据绑定事件中有以下代码:
要加载的代码如下:
结果是这样的:
所以,你没有混乱的标记。
您不必混合代码和标记。
你有一个干净漂亮的行事件可以使用
行事件具有完整的数据库/数据源行。
并且将所有代码都保存在该页面的代码中。