如何在ASP.NET DataRepeater控件中执行条件逻辑?

时间:2010-08-12 03:10:05

标签: c# asp.net data-binding asp.net-2.0 datarepeater

我将DataRepeater控件绑定到包含许多列的表。我想只显示其中的一部分,具体取决于填充的内容。

我应该如何/在哪里进行dataRepeater中的续会测试?这是我的itemtemplate中的代码:

<% if (0= (DataBinder.Eval(Container.DataItem, "first").ToString().Length))
{
   i++;
}
    %>

我得到的错误是:CS0103:当前上下文中不存在名称“容器”

1 个答案:

答案 0 :(得分:5)

你应该没问题:

<% if (0 == (Eval("first").ToString().Length))
{
   i++;
}
%>

但是根据你想做什么,我可能会编写一个函数来处理数据的绑定,以保持显示和业务逻辑之间的分离。

e.g。

你的aspx中的

<asp:Repeater id="myRepeater" runat="server" onDataItemBound="FillInRepeater">
<ItemTemplate>
<div class="contactLarge">
    <div style="background-color:#C5CED8;clear:both"><asp:Label runat="server" ID="title"></asp:Label>
    .
    .
    .
</div>
</ItemTemplate>
<AlternatingItemTemplate>
</AlternatingItemTemplate>
</asp:Repeater>

在您的代码隐藏中:

protected void FillInRepeater(object sender, RepeaterItemEventArgs e)
{
  if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
  {
    //in here you bind to your repeater labels and stuff then do all that sorta logic.
    //Grab Primary Data
    string titleText = DataBinder.Eval(e.Item.DataItem, "title").ToString();
    string somethingElseText = DataBinder.Eval(e.Item.DataItem, "somethingElse").ToString();
    string maybeSeeMaybeDontText = DataBinder.Eval(e.Item.DataItem, "maybeSeeMaybeDont").ToString();

    //Find the controls and populate them according the to row
    Label titleLabel = (Label)e.Item.FindControl("title");
    Label somethingElseLabel = (Label)e.Item.FindControl("somethingElse");
    Label maybeSeeMaybeDontLabel = (Label)e.Item.FindControl("maybeSeeMaybeDont");

    // display the fields you want to
    titleLabel.Text = titleText;
    somethingElseLabel.Text = somethingElseText;

    // here is where you could do some of your conditional logic
    if (titleText.Length != 0 && somethingElseText.Length != 0)
    {
        maybeSeeMaybeDontLabel.Text = maybeSeeMaybeDontText;
    }
  }
}
个人而言,我更喜欢用这种方式做事,而不是在ASP中做任何逻辑。我知道这对某些人来说似乎有些愚蠢,但我喜欢尽可能地将我的业务逻辑与我的显示逻辑分开。