C# 带Eval()或DataBinder.Eval()的ListView中的If语句?

C# 带Eval()或DataBinder.Eval()的ListView中的If语句?,c#,asp.net,listview,eval,C#,Asp.net,Listview,Eval,我在.aspx页面上有一个listview控件。在这个列表视图中,我想检查来自数据库的“Type”属性。下面是示例代码: <ItemTemplate> <%# if(Convert.ToInt32(DataBinder.Eval(Container.DataItem,"Type")) == 0){ %> <tr class="item"> <td>

我在.aspx页面上有一个listview控件。在这个列表视图中,我想检查来自数据库的“Type”属性。下面是示例代码:

 <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(),但得到了异常“预期的类、委托、枚举、接口或结构”。我会做错什么?在代码隐藏中编写函数不是我的选择。有什么方法可以实现这一点吗?

未经测试,因为我目前没有可用的Visual Studio,但由于它有一个
可见的
属性,下面应该可以工作:

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

...

是的,但是您必须执行一些客户端脚本。。。我建议使用jquery


基本上,您可以循环使用jquery中的所有行,并且基于行中的数据,您可以基于“.item”选择器更改行对象的innerhtml,以确定它应该是一种格式还是另一种格式。

以下是完整的代码,非常简洁

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



“在代码隐藏中编写函数不是我的选择”为什么?有一个ItemDataBound事件,您可以轻松地完成这一切:问题在于控制语句,在项目模板中,它们是不允许的。不需要客户端脚本——请参阅@Heinzi了解执行此操作的方法。我对OP问题的理解是,他想实现的每一行都有两种不同的格式。如果是一种类型,则格式应为1路;如果是另一种类型,则格式应为另一路。我不确定基于类型隐藏行是否有效,除非他在模板中双重显示来自数据集的每条记录,并在每次提交时关闭和打开它们。Heinzi的方法完全正确。此操作不需要客户端脚本。是的,这正是您要做的,或者您可以像我的示例一样在特定情况下执行。此评估将在服务器端执行,对吗?@HakuKalay-in.NET stuff in
中的内容由脚本系统评估,而不是直接发送到浏览器。当
#
出现时,它意味着编写表达式求值的结果。当它不存在时,由脚本语言执行(因此它可以包含分支和循环功能)