[英]Getting the KeyID from the “parent” repeater
我在外層中繼器的ItemTemplate中有一個中繼器-在Ajax手風琴中。
為了更好地描述它,它是一個Blog,每個帖子下都有評論,但是這些評論在Accordion中折疊了。
我可以通過使用OnItemDataBound看到手風琴嵌套在手風琴內部,在外層中繼器中找到手風琴,並通過使用Accordion.FindControl在內層中繼器中找到。 到現在為止還挺好。
但是,正在發生的是,所有評論都被綁定,而不僅僅是特定於該博客帖子的評論。 我需要能夠將KeyID傳遞給內部嵌套的Repeater,以便我可以選擇與ID = KeyID的每個Blog帖子相關的注釋。
我猜想該ID將以某種方式與RepeaterItemEventArgs綁定在一起,但是我不知道這種情況如何發生,或者如何確定我正在使用哪個博客KeyID。
protected void BindComments(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item)
{
AjaxControlToolkit.Accordion myCommentsAccordion = (AjaxControlToolkit.Accordion)e.Item.FindControl("CommentsAccordion");
Repeater myCommentRepeater = (Repeater)myCommentsAccordion.FindControl("CommentsRepeater");
Utility myUtility = new Utility();
SqlConnection myConn = myUtility.GetConnection();
string myCommandText = "select [CommentID],[ShadeID],[Commenter],[CommentDate],[Comment] from [Comments] where ShadeID = " + ???? + " order by CommentDate DESC";
如果更多信息有幫助,請告訴我。 我不確定什么是有幫助的,什么使問題變得混亂。
更新-aspx,如下所示:
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeBehind="TestShades.aspx.cs" Inherits="DisciplesWalk.TestShades" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="Content" runat="server">
<asp:Image ImageAlign= "Middle" ID="ShadesBanner" runat="server" ImageUrl="~/Images/Banners/Shades.jpg" />
<asp:Label ID="myErrorLabel" runat="Server" CssClass="failureNotification"></asp:Label>
<div id="ShadesDiv" class="ShadesDiv">
<asp:Repeater ID="ShadesRepeater" runat="server" OnItemDataBound="BindComments">
<ItemTemplate>
<!-- top level repeater element template here -->
<br />
<asp:Label ID="ShadeDate" CssClass="ShadeDate" runat="server" Width="100%" Text='<%# Bind("ShadeDate", "{0:MM/dd/yyyy}") %>'></asp:Label>
<span class="notehead">
<asp:Label ID="ShadeTitle" CssClass="ShadeHeading" runat="server" Width="100%" Text='<%# Bind("ShadeTitle")%>'></asp:Label>
</span>
<br /><br />
<span>
<img alt="" src="Images/shades/<%# Eval("ShadeImage") %>" style = "width:200px; padding-right:9px; padding-top:0px; padding-bottom:3px; float:left;" />
<%# Eval("ShadeBody") %>
</span>
<br />
<AjaxToolkit:Accordion ID="CommentsAccordion" runat="server"
SelectedIndex="-1"
CssClass="accordion"
HeaderCssClass="accordionHeader"
HeaderSelectedCssClass="accordionHeaderSelected"
ContentCssClass="accordionContent"
AutoSize="None"
FadeTransitions="true"
TransitionDuration="250"
FramesPerSecond="40"
RequireOpenedPane="false"
SuppressHeaderPostbacks="true">
<Panes>
<AjaxToolkit:AccordionPane runat="server" ID="OverviewPane">
<Header> Comments</Header>
<Content>
<div style="overflow-y:scroll;height:450px">
<asp:Repeater ID="CommentsRepeater" runat="server">
<ItemTemplate>
<br />
<span>
<asp:Label ID="CommenterLabel" runat="server" Width="100%" Text='<%# Eval("Commenter")%>'></asp:Label>
<asp:Label ID="Label1" runat="server" Width="100%" Text='<%# Eval("CommentDate")%>'></asp:Label>
</span>
<span>
<asp:Label ID="CommentBody" runat="server" Width="100%" Text='<%# Eval("Comment")%>'></asp:Label>
</span>
<br />
<hr class="HRSeperator" />
<br /><br />
</ItemTemplate>
</asp:Repeater>
</div>
</Content>
</AjaxToolkit:AccordionPane>
</Panes>
</AjaxToolkit:Accordion>
</ItemTemplate>
<SeparatorTemplate>
<br />
<asp:Image ID="Image2" runat="server" ImageUrl="~/Images/separator.jpg" ImageAlign="Middle" />
<br /><br />
</SeparatorTemplate>
</asp:Repeater>
</div>
<asp:Table ID="AddCommentTable" runat="server" CellPadding="12" cellspacing="0" width="100%" Visible="false">
<asp:TableRow>
<asp:TableCell HorizontalAlign="Left">
<br />
<asp:Label runat="server" ID="AddCommenterLabel" Text="Name:" Visible="True"></asp:Label>
<br />
<asp:TextBox ID="CommenterTextBox" runat="server" Width="25%"></asp:TextBox>
<br />
<asp:Label runat="server" ID="CommentLabel" Text="Your comment:" Visible="True"></asp:Label>
<br />
<asp:TextBox ID="CommentTextBox" runat="server" Width="90%"></asp:TextBox>
<br /><br />
<asp:Button ID="AddCommentButton" runat="server" Text="Submit Comment" onclick="AddCommentButton_Click" />
</asp:TableCell>
</asp:TableRow>
</asp:Table>
</asp:Content>
我認為您可以這樣做:
在.aspx文件上方定義
<AjaxToolkit:Accordion ID="CommentsAccordion" runat="server"
把這條線
<asp:Label ID="lblShadeID" runat="server" Text='<%# Eval("ShadeID") %>' Visible="false"></asp:Label>
然后將此代碼用於BindComments
方法:
protected void BindComments(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item)
{
AjaxControlToolkit.Accordion myCommentsAccordion = (AjaxControlToolkit.Accordion)e.Item.FindControl("CommentsAccordion");
Repeater myCommentRepeater = (Repeater)myCommentsAccordion.FindControl("CommentsRepeater");
var label = e.Item.FindControl("lblShadeID") as Label;
int shadeId = Convert.ToInt32(label.Text);
Utility myUtility = new Utility();
SqlConnection myConn = myUtility.GetConnection();
string myCommandText = "select [CommentID],[ShadeID],[Commenter],[CommentDate],[Comment] from [Comments] where ShadeID = @shadeId order by CommentDate DESC";
// set command parameter named @shadeId to the value of shadeId, execute the query and bind data to myCommentRepeater
}
}
希望這可以幫助。
問候,Uros
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.