我的来源页面:
<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,因为每个人都有。我能理解其中的原因,但我很难找到解决办法。
请有人帮我解决这个问题。提前致谢。答案 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;
}