2010-11-11 23 views
4

我在.aspx页面上有一个listview控件。在这个列表视图里面我想检查来自数据库的“Type”属性。这里是示例代码:如果在带有Eval()或DataBinder.Eval()的ListView中的语句?

<ItemTemplate> 
     <%# if(Convert.ToInt32(DataBinder.Eval(Container.DataItem,"Type")) == 0){ %> 
      <tr class="item"> 
       <td> 
        <%# Convert.ToDateTime(Eval("WorkDate")).ToShortDateString() %> 
       </td> 
       <td style="text-align: center;"> 
        <%# Eval("SkillName") %> 
       </td> 
      </tr> 
     <%# } else if (Convert.ToInt32(DataBinder.Eval(Container.DataItem,"Type")) == 1) {%> 
      <tr class="item"> 
       <td colspan="2"> 
        <strong><%# Convert.ToDateTime(Eval("WorkDate")).ToShortDateString() %></strong> 
       </td> 
      </tr> 
      <% } %> 
    </ItemTemplate> 

作为最后的手段,我试图用户的DataBinder.Eval(),但我得到的异常“预期类,委托,枚举,接口或结构”。我能做什么错了?在代码隐藏中编写函数对我来说不是一种选择。有没有一种方法来实现这一目标?

+0

“编写代码隐藏的功能是不是我的选择” 为什么呢?有一个ItemDataBound事件,你可以很容易地做到这一点:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.itemdatabound.aspx – 2010-11-11 17:09:49

+0

问题是与控制语句,它们在项目模板中是不可以的。 – Hogan 2010-11-11 17:14:49

回答

2

未经检验的,因为我没有Visual Studio中可用的那一刻,但由于HtmlTableRowVisible属性,下面应该工作:

<tr class="item" runat="server" Visible='<%# Convert.ToInt32(Eval("Type")) == 0 %>'> 
    ... 
</tr> 
+0

很好的回答.... – ward87 2010-11-11 17:32:48

0

是你将不得不虽然做了一些客户端脚本...我会建议jquery ..

你基本上会循环遍历jQuery中的所有行,并根据行中的数据,你将能够改变行对象的innerhtml基于“.item “选择器来确定它应该是一种格式还是另一种格式。

+1

不需要客户端脚本 - 请参阅@Heinzi站立方式来做到这一点。 – Hogan 2010-11-11 17:13:50

+0

我对OP的问题的理解是,他有两种不同的格式,他希望实施每一行。如果它是一种类型的格式应该是1种方式,如果它的另一种类型应该是另一种方式。我不确定隐藏基于类型的行是否会起作用,除非他将模板中的每个记录从数据集中双重显示,并在每次迭代中将它们关闭并打开。 – Patrick 2010-11-11 17:16:16

+0

Heinzi的方式完全正确。这不需要客户端脚本。 – ward87 2010-11-11 17:19:45

4

这是完整的代码,花哨和简短。

<ItemTemplate> 
     <tr class="item"> 
      <td colspan="<%# Eval(Container.DataItem,"Type")) == 0 ? 1:2%>"> 
       <strong><%# Convert.ToDateTime(Eval("WorkDate")).ToShortDateString() %></strong> 
      </td> 
      <td style="text-align: center;" visible="<%# Eval(Container.DataItem,"Type")) == 1>"> 
       <%# Eval("SkillName") %> 
      </td> 
     </tr> 
</ItemTemplate> 
+1

+1扩展Heinzi的探索。谢谢。 – Patrick 2010-11-11 17:20:13

+0

这个Eval的东西会在服务器端执行,对吗? – NoSaidTheCompiler 2014-12-05 19:56:53

+1

@HakuKalay - 在.NET中的东西'<% %>'和'<%# %>'由脚本系统进行评估,而不是直接发送到浏览器。当'#'出现时,意味着写出评估表达式的结果。当它不存在时,它由脚本语言执行(因此它可以包含分支和循环功能)。 – Hogan 2014-12-05 20:33:45