I'm having some problem getting a repeater with a nested repeater update with ajaxmanger.
Se example page here: http://dev12.spireweb.no/repeater_ajax.aspx
I just want the nested repeater in the post to update when a comment this added or deleted. This only works for the first post.
Is there a way to solved this issue?
Se example page here: http://dev12.spireweb.no/repeater_ajax.aspx
I just want the nested repeater in the post to update when a comment this added or deleted. This only works for the first post.
Is there a way to solved this issue?
<
telerik:RadAjaxManager
ID
=
"RadAjaxManager1"
runat
=
"server"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"btnRefreshPosts"
EventName
=
"onclick"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"pnlPosts"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
<
telerik:AjaxSetting
AjaxControlID
=
"repPosts"
EventName
=
"onitemcommand"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"pnlComments"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
<
telerik:AjaxSetting
AjaxControlID
=
"repComments"
EventName
=
"onitemcommand"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"pnlComments"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManager
>
<
asp:Panel
ID
=
"pnlPosts"
runat
=
"server"
>
<
div
id
=
"Posts"
style
=
"padding:10px;margin:15px; width:700px;"
>
<
asp:Repeater
ID
=
"repPosts"
runat
=
"server"
onitemdatabound
=
"repPosts_ItemDataBound"
OnItemCommand
=
"repPosts_ItemCommand"
>
<
ItemTemplate
>
<
div
class
=
"postitem"
>
<
div
class
=
"sep"
></
div
>
<
div
class
=
"postitem_name"
>
<
asp:Literal
ID
=
"litName"
runat
=
"server"
/>
<
asp:Literal
ID
=
"litCreated"
runat
=
"server"
/>
</
div
>
<
div
class
=
"postitem_content"
>
<
asp:Button
ID
=
"btnDelete"
runat
=
"server"
Text
=
""
CssClass
=
"btnDelete"
/>
<
asp:Literal
ID
=
"litContent"
runat
=
"server"
/>
</
div
>
</
div
>
<
div
style
=
"clear:both;"
></
div
>
<
asp:Panel
ID
=
"pnlComments"
runat
=
"server"
>
<
div
class
=
"CommentsWrapper"
>
<
asp:Repeater
ID
=
"repComments"
runat
=
"server"
OnItemDataBound
=
"repComments_ItemDataBound"
OnItemCommand
=
"repComments_ItemCommand"
>
<
HeaderTemplate
>
<
h3
>Comments</
h3
>
</
HeaderTemplate
>
<
ItemTemplate
>
<
div
class
=
"Comment"
>
<
asp:Button
ID
=
"btnDelete"
runat
=
"server"
Text
=
""
CssClass
=
"btnDelete"
/>
<
asp:Literal
ID
=
"litComment"
runat
=
"server"
/>
</
div
>
</
ItemTemplate
>
</
asp:Repeater
>
<
div
class
=
"AddComment"
>
<
asp:Panel
ID
=
"pnlAddComment"
runat
=
"server"
DefaultButton
=
"btnAddComment"
>
<
asp:TextBox
ID
=
"txtComment"
runat
=
"server"
></
asp:TextBox
>
<
asp:Button
ID
=
"btnAddComment"
CssClass
=
"common btnAddComment"
runat
=
"server"
Text
=
"Submit"
/>
</
asp:Panel
>
</
div
>
<
div
style
=
"clear:both;"
></
div
>
</
div
>
</
asp:Panel
>
</
ItemTemplate
>
</
asp:Repeater
>
</
div
>
</
asp:Panel
>
protected void GetPosts()
{
repPosts.DataSource = WineclubManager.GetPosts(19,20);
repPosts.DataBind();
}
protected void repPosts_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
{
PostItem row = (PostItem)(e.Item.DataItem);
CustomerItem customer = CustomerManager.GetCustomer(row.CustomerID);
Repeater repComments = (Repeater)e.Item.FindControl("repComments");
Literal litName = (Literal)e.Item.FindControl("litName");
Literal litCreated = (Literal)e.Item.FindControl("litCreated");
Literal litContent = (Literal)e.Item.FindControl("litContent");
TextBox txtComment = (TextBox)e.Item.FindControl("txtComment");
Button btnAddComment = (Button)e.Item.FindControl("btnAddComment");
Button btnDelete = (Button)e.Item.FindControl("btnDelete");
if (row.CustomerID != 0)
litName.Text = "<
span
>" + customer.Firstname + " " + customer.Lastname + "</
span
>";
else
litName.Text = "<
span
>LabelWines</
span
>";
litCreated.Text = "<
span
class=\"date\">" + row.Created.ToString("dd.MM.yyyy HH:mm") + "</
span
>";
litContent.Text = row.Content;
txtComment.Text = "Write a comment";
if (row.CustomerID == CustomerManager.GetCustomerID())
{
btnDelete.CommandName = "Delete";
btnDelete.CommandArgument = row.ID.ToString();
btnDelete.Attributes.Add("onclick", "jConfirm('" + Resources.Language.Wineclub_PostPopupMessage.Replace(Environment.NewLine, "<
br
/>") + "', '" + Resources.Language.Wineclub_PostPopupHeader + "', function(r) { if(r==true) __doPostBack(\"" + btnDelete.ClientID.Replace("_", "$") + "\", \"\"); }); return false;");
}
else
btnDelete.Visible = false;
btnAddComment.CommandName = "AddComment";
btnAddComment.CommandArgument = row.ID.ToString();
BindInnerRepeaterComments(repComments, row.ID);
}
}
protected void repPosts_ItemCommand(object source, RepeaterCommandEventArgs e)
{
switch (e.CommandName)
{
case "AddComment":
CommentItem item = new CommentItem();
item.PostID = int.Parse(e.CommandArgument.ToString());
item.CustomerID = 2;
TextBox txtComment = e.Item.FindControl("txtComment") as TextBox;
if ((txtComment.Text.Length > 0) && (txtComment.Text != "Write a comment"))
item.Comment = txtComment.Text;
int id = WineclubManager.AddComment(item);
txtComment.Text = Resources.Language.Wineclub_PostDefaultCommentText;
Repeater repComments = (Repeater)e.Item.FindControl("repComments");
BindInnerRepeaterComments(repComments, int.Parse(e.CommandArgument.ToString()));
RadAjaxManager ra = (RadAjaxManager)(Page.FindControl("RadAjaxManager1"));
ra.ResponseScripts.Add("javascript:InitCommentTextFields();");
break;
}
switch (e.CommandName)
{
case "Delete":
WineclubManager.DeletePost(int.Parse(e.CommandArgument.ToString()));
GetPosts();
RadAjaxManager ra = (RadAjaxManager)(Page.FindControl("RadAjaxManager1"));
ra.ResponseScripts.Add("javascript:InitCommentTextFields();");
ra.ResponseScripts.Add("javascript:YoutubePosts();");
break;
}
}
private void BindInnerRepeaterComments(Repeater Rep, int PostID)
{
CommentCollection items = WineclubManager.GetComments(PostID, false);
if (items.Count > 0)
{
Rep.DataSource = items;
Rep.DataBind();
Rep.Visible = true;
}
else
Rep.Visible = false;
}
protected void repComments_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
{
CommentItem row = (CommentItem)e.Item.DataItem;
CustomerItem customer = CustomerManager.GetCustomer(row.CustomerID);
Literal litComment = (Literal)e.Item.FindControl("litComment");
Button btnDelete = (Button)e.Item.FindControl("btnDelete");
litComment.Text = "<
span
class=\"commentname\">" + customer.Firstname + " " + customer.Lastname + " - </
span
><
span
class=\"commentdate\">" + row.Created.ToString("dd.MM.yyyy HH:mm") + "</
span
>" + "<
span
class=\"commentmessage\">" + row.Comment + "</
span
>";
if (row.CustomerID == 2)
{
btnDelete.CommandName = "Delete";
btnDelete.CommandArgument = row.ID.ToString();
btnDelete.Attributes.Add("onclick", "jConfirm('" + Resources.Language.Wineclub_PostCommentPopupMessage.Replace(Environment.NewLine, "<
br
/>") + "', '" + Resources.Language.Wineclub_PostCommentPopupHeader + "', function(r) { if(r==true) __doPostBack(\"" + btnDelete.ClientID.Replace("_", "$") + "\", \"\"); }); return false;");
}
else
btnDelete.Visible = false;
}
}
protected void repComments_ItemCommand(object source, RepeaterCommandEventArgs e)
{
CommentItem currentComment = WineclubManager.GetComment(int.Parse(e.CommandArgument.ToString()));
Repeater currentRep = (Repeater)source;
switch (e.CommandName)
{
case "Delete":
WineclubManager.DeleteComment(int.Parse(e.CommandArgument.ToString()));
//GetPosts();
BindInnerRepeaterComments(currentRep, currentComment.PostID);
RadAjaxManager ra = (RadAjaxManager)(Page.FindControl("RadAjaxManager1"));
ra.ResponseScripts.Add("javascript:InitCommentTextFields();");
break;
}
}