如果带有Eval()或DataBinder.Eval()的ListView中的语句?

时间:2010-11-11 17:06:26

标签: c# asp.net listview eval

我在.aspx页面上有一个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(),但我得到异常“预期的类,委托,枚举,接口或结构”。我能做错什么?在代码隐藏中编写函数不是我的选择。有没有办法实现这个目标?

3 个答案:

答案 0 :(得分: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 :(得分:2)

未经测试,因为我目前没有Visual Studio,但由于HtmlTableRow具有Visible属性,因此以下内容应该有效:

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

答案 2 :(得分:0)

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

你基本上会循环遍历jquery中的所有行,并根据行中的数据,你可以根据“.item”选择器更改行对象的innerhtml,以确定它是否应该在一个格式或其他。