Asp.net2.0不支持在数据绑定时的条件表达式。Asp.net 4.0已经平滑地解决这个问题,不用修改代码。
下面让我们来看一个简单的ASP.NET数据绑定场景,有这么一个Repeater:

   1:      <asp:Repeater runat="server" ID="itemsList">
   2:          <HeaderTemplate>
   3:              <table border="1" cellspacing="0" cellpadding="5">
   4:          </HeaderTemplate>
   5:          <ItemTemplate>
   6:              <tr>
   7:                  <td align="right">
   8:                      <%# Container.ItemIndex + 1 %>.
   9:                  </td>
  10:                  <td>
  11:                      <%# Eval("Title") %>
  12:                  </td>
  13:              </tr>
  14:          </ItemTemplate>
  15:          <FooterTemplate>
  16:              </table>
  17:          </FooterTemplate>
  18:      </asp:Repeater>


然后后端的cs:

   1:     protected void Page_Load(object sender, EventArgs e)
   2:          {
   3:              var items = new[] { 
   4:                      new { Id = 1, Title = "Headline 1" },
   5:                      new { Id = 2, Title = "Headline 2" },
   6:                      new { Id = 2, Title = "Headline 3" },
   7:                      new { Id = 2, Title = "Headline 4" },
   8:                      new { Id = 2, Title = "Headline 5" }
   9:                  };
  10:              itemsList.DataSource = items;
  11:              itemsList.DataBind();
  12:          }


当我们需要判断绑定时数据行,我们需要Create这么一个类似的方法或函数:

   1:          /// <summary>
   2:          /// Iifs the specified condition.
   3:          /// </summary>
   4:          /// <param name="condition">if set to <c>true</c> [condition].</param>
   5:          /// <param name="trueResult">The true result.</param>
   6:          /// <param name="falseResult">The false result.</param>
   7:          /// <returns></returns>
   8:          protected object Iif(bool condition, object trueResult, object falseResult)
   9:          {
  10:               return condition ? trueResult : falseResult;
  11:          } 


然后在ASPX中使用它:

   1:  <asp:Repeater runat="server" ID="Repeater1">
   2:    <HeaderTemplate>
   3:      <table border="1" cellspacing="0" cellpadding="5">
   4:      </HeaderTemplate>
   5:    <ItemTemplate>
   6:      <tr style='background-color: <%# Iif(Container.ItemIndex % 2==0, "white", "whitesmoke") %>'>
   7:        <td align="right">
   8:          <%# Container.ItemIndex + 1 %>.</td>
   9:        <td>
  10:          <%# Eval("Title") %></td>
  11:      </tr>
  12:    </ItemTemplate>
  13:    <FooterTemplate>
  14:      </table>
  15:    </FooterTemplate>
  16:  </asp:Repeater>


这是在模仿VB中的IIF函数。到了ASP.NET 4.0中,我们可以直接这么写了:

   1:  <asp:Repeater runat="server" ID="Repeater2">
   2:    <HeaderTemplate>
   3:      <table border="1" cellspacing="0" cellpadding="5">
   4:      </HeaderTemplate>
   5:    <ItemTemplate>
   6:      <tr style='background-color:<%# Container.ItemIndex % 2==0 ? "white" : "whitesmoke" %>'>
   7:        <td align="right">
   8:          <%# Container.ItemIndex + 1 %>.</td>
   9:        <td>
  10:          <%# Eval("Title") %></td>
  11:      </tr>
  12:    </ItemTemplate>
  13:    <FooterTemplate>
  14:      </table>
  15:    </FooterTemplate>
  16:  </asp:Repeater>


好了,这个演示是基于ASP.NET WebForm 数据绑定时条件表达式的实现。希望这篇POST对您有帮助!

Author: Petter Liu   http://wintersun.cnblogs.com

posted on 2010-04-18 17:49  PetterLiu  阅读(1761)  评论(2编辑  收藏  举报