2011-04-12 57 views
2

我在asp.net中使用了中继器。我的问题是不知道如何隐藏直放站中的字段。如果正常价格等于零,则会有正常价格和现在价格,这会隐藏字段,如果不是,则会显示正常价格的价值。我希望你能对此有所帮助。ASP.net中的中继器

这里我的代码在ASP:

<a href="<%=Utility.GetSiteRoot() %>/BookInfo.aspx?SKU=<%# Utility.SKUMask(Eval("lb_sku").ToString()) %>"> 
       <img width="150px" src='<%# Eval("lb_picturepath")%>'> 
      </td> 
      <td valign="top"> 
      <asp:Label ID="lb_titleLabel" runat="server" CssClass="center-head" Text='<%# Eval("lb_title") %>' /> 
      <p><asp:Label ID="lb_descriptionLabel" runat="server" Text='<%# Eval("lb_description") %>' /></p> 
      <div class="price"><%# "Price: " + decimal.Round((decimal)Eval("lb_sellingprice"),2)%></div> 
      </td> 
      </tr> 
      <tr> 
      <td></td> 
      <td> 
       <a class="addtocart" href="<%=Utility.GetSiteRoot() %>/AddToCart.aspx?SKU=<%# Utility.SKUMask(Eval("lb_sku").ToString()) %>" >Add To Cart</a> 
       <a href="<%=Utility.GetSiteRoot() %>/BookInfo.aspx?SKU=<%# Utility.SKUMask(Eval("lb_sku").ToString()) %>" class="readmore"> 
       View Details 
      </a></td> 

的感谢!

+0

它应该隐藏而电网被填充,或者如果它是动态的,为用户与网格交互? – mservidio 2011-04-12 01:06:49

+0

@mservidio,请检查我的网站。 – 2011-04-12 01:10:13

+1

如果您发布了您正在使用的代码并更详细地解释了您要完成的任务,那么您将得到更好的答案。 – 2011-04-12 01:12:50

回答

10

您需要处理OnItemDataBound事件,然后更改控件的可见性。这方面的一个例子如下所示:

ASPX页

<asp:Repeater ID="MyRepeater" OnItemDataBound="MyRepeater_OnItemDataBound" runat="server"> 
<ItemTemplate> 
    <asp:Label ID="RegularPriceLabel" runat="server" /> 
    <br/> 
    <asp:Label ID="BuyNowPriceLabel" runat="server" /> 
</ItemTemplate> 
</asp:Repeater> 

代码后面

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     MyRepeater.DataSource = GetDataSource(); 
     MyRepeater.DataBind(); 
    } 
} 

protected void MyRepeater_OnItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     // This will be your data object 
     MyEntity o = (MyEntity) e.Item.DataItem; 

     // Get the labels 
     Label RegularPriceLabel = (Label) e.Item.FindControl("RegularPriceLabel"); 
     Label BuyNowPriceLabel = (Label) e.Item.FindControl("BuyNowPriceLabel"); 

     // Only show regular price if it is set 
     RegularPriceLabel.Visible = (o.RegularPrice > 0); 

     // Populate labels 
     RegularPriceLabel.Text = o.RegularPrice.ToString(); 
     BuyNowPriceLabel.Text = o.BuyNowPrice.ToString(); 

    } 
} 
+0

玛格丽特复制/粘贴您的代码,以获得投票并接受它。我认为silverfang和margaret是同一个人。请报告。 – Aristos 2011-05-27 11:50:07

5

我会看看Repeater的ItemDataBound事件。它会触发中继器中的每个项目,并允许您更轻松地执行任何代码隐藏(如隐藏标签)。

编辑:为了您的具体的例子,因为要格式化的价格为好,它可能更容易只是调用自定义的方法来呈现的价格,像这样:

ASPX:

<%#RenderPrice((decimal)Eval("lb_sellingprice"))%> 

方法:

protected string RenderPrice(decimal price) { 
    if (price > 0) { 
     return "Price: $" + decimal.Round(price); 
    } else { 
     return string.Empty; 
    } 
} 

它的快速和肮脏的,但它的工作原理。

+0

其工作!非常感谢.. :) – 2011-04-12 01:52:06