如何在c#中检索datalist项?

时间:2014-07-04 10:40:03

标签: c# asp.net datalist

我的来源页面:

  <asp:DataList ID="datalist" RepeatColumns="6" runat="server" > 
  <ItemTemplate>
  <div class="rating">
  <div>
  <cc1:Rating ID="Rating1" AutoPostBack="true" OnChanged= "rt_chnaged" runat="server" StarCssClass="ratingstar"  RatingAlign="Horizontal"  WaitingStarCssClass="ratingSaved" EmptyStarCssClass="ratingEmpty" FilledStarCssClass="ratingFilled">
                 </cc1:Rating>  </div>
  <asp:Label runat="server"  ID="Label2" Text='<%# Eval("moviename") %>' Visible="true"></asp:Label>
  </div>
  </ItemTemplate></asp:DataList>

我的守则背后:

 public void rt_chnaged(object sender, AjaxControlToolkit.RatingEventArgs e)
 {
    Label lbl = null;
    foreach (DataListItem li in datalist.Items)
    { 
       lbl = li.FindControl("Label2") as Label;
    }
    Label3.Text = lbl.Text;
 }

在这里,我的问题很简单,但是我花了很多时间来解决这个问题。

在这里,我绑定了数据库中的所有内容。我想要的是,点击相应的评级栏,我需要在标签外面显示相应的电影名称,即Label3。

例如:

考虑在moviename专栏(数据库)中拥有变形金刚,人猿星球和Mankatha。所以这里我的输出将是三个带有三个评级栏的标签。所以我现在想要的是,我只需要在label2(datalist内部)中将影片名称显示为label3(在datalist之外)

在这里,我尝试了我的代码(之前提到过几行),但总是得到Mankatha,因为每个人都有。我能理解其中的原因,但我很难找到解决办法。

请有人帮我解决这个问题。提前致谢。

1 个答案:

答案 0 :(得分:2)

您可以在项目中使用控件的NamingContainer(也适用于其他数据绑定Web控件,如repeater或gridview)。

sender始终是引发事件的控件,在本例中为Rating控件:

public void rt_chnaged(object sender, AjaxControlToolkit.RatingEventArgs e)
{
    Rating rating = (Rating) sender;
    DataListItem item = (DataListItem) rating.NamingContainer;
    Label lbl = (Label) item.FindControl("Label2");
    Label3.Text = lbl.Text;
}