Note that there are some explanatory texts on larger screens.

plurals
  1. POC#/.Net 2.0: Problem with the Repeater control and Checkboxes when inside a User Control!
    text
    copied!<p>I have a repeater control with a check box, if I check the box then my delete functionality will delete an item in the underlying table.</p> <p>When I test the delete functionality on an aspx page with a code behind page, everything works fine. Hooray!</p> <p>However, when I take the repeater and put it into a User Control, the delete functionality thinks that my repeater control has no items.</p> <p>Code as below, I've tried to strip out the unnecessary code. I asked this question on the asp.net forums but no-one responded!</p> <p>asxc:</p> <pre><code>&lt;%@ Control AutoEventWireup="true" Inherits="Moto.Web.UI.UserControls.Messages.MessageListForm" Language="C#" %&gt; &lt;asp:button id="btnDelete" runat="server" text="Delete" OnClick="btnDelete_Click" &gt;&lt;/asp:button&gt; &lt;asp:Repeater ID="RepeaterMessageList" runat="server" EnableViewState="true" &gt; &lt;ItemTemplate &gt; &lt;div class="messageContainer item" &gt; &lt;div class="messageListLeft"&gt; &lt;div class="messageList"&gt; &lt;asp:Image ID="imgUser" runat="server" CssClass="" /&gt; &lt;asp:CheckBox ID="chkDeleteMe" runat="server" Text="test" /&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/ItemTemplate&gt; &lt;/asp:Repeater&gt; </code></pre> <p>Code file:</p> <pre><code>using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Collections; using System.Collections.Generic; using System.IO; namespace Moto.Web.UI.UserControls.Messages { public class MessageListForm : Moto.Web.UI.UserControls.UserControl//System.Web.UI.UserControl { private string userGUID; private MembershipUser MembershipUser; private Moto.Business.UserComponent userComponent; private Moto.Business.User user; private Button cmdPrev; private Button cmdNext; private Button cmdNewest; private Button cmdOldest; private Label lblCurrentPage; private Label lblMessage; private HyperLink hypPageRedirect; private Repeater RepeaterMessageList; private MessageView DisplayMessages = MessageView.Inbox;//default setting private Button btnDelete; private Label lblConfirmDelete; protected Button btnConfirmDelete; protected Button btnCancelDelete; enum MessageView { Inbox, //0 Sent //1 } protected override void OnInit(EventArgs e) { base.OnInit(e); this.InitializePage(); } protected void InitializePage() { this.cmdNext = (Button)FindControl("cmdNext"); this.cmdPrev = (Button)FindControl("cmdPrev"); this.cmdOldest = (Button)FindControl("cmdOldest"); this.cmdNewest = (Button)FindControl("cmdNewest"); this.lblCurrentPage = (Label)FindControl("lblCurrentPage"); // this.RepeaterMessageList = (Repeater)FindControl("RepeaterMessageList"); this.RepeaterMessageList = (Repeater)FindControlRecursive(this, "RepeaterMessageList"); this.hypPageRedirect = (HyperLink)FindControl("hypPageRedirect"); this.lblMessage = (Label)FindControl("lblMessage"); //delete functionality this.btnDelete = (Button)FindControl("btnDelete"); this.lblConfirmDelete = (Label)FindControl("lblConfirmDelete"); this.btnConfirmDelete = (Button)FindControl("btnConfirmDelete"); this.btnCancelDelete = (Button)FindControl("btnCancelDelete"); //where are we coming from - are we the Logged in user or just a voyeur? if (Page.User.Identity.IsAuthenticated) { this.userComponent = new Moto.Business.UserComponent(); this.MembershipUser = Membership.GetUser();//user logged in this.userGUID = this.MembershipUser.ProviderUserKey.ToString();//signed in user this.user = this.userComponent.GetByUserGUID(this.userGUID); } else { Response.Redirect("~/default.aspx"); } if (null != this.Page.Request.QueryString["viewing"]) { //reset the enum value DisplayMessages = this.Page.Request.QueryString["viewing"].ToLower() == "sent" ? MessageView.Sent : MessageView.Inbox; CurrentPage = 0;//if it's a redirect then reset the Current Page } } void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ItemsGet();//on post back we'll call it elsewhere } switch (DisplayMessages) { case MessageView.Sent: this.hypPageRedirect.Text += "Inbox"; this.hypPageRedirect.NavigateUrl += "?viewing=Inbox"; break; case MessageView.Inbox: this.hypPageRedirect.Text += "Sent Items"; this.hypPageRedirect.NavigateUrl += "?viewing=Sent"; break; } } protected void cmdPrev_Click(object sender, EventArgs e) { // Set viewstate variable to the previous page CurrentPage -= 1; // Reload control ItemsGet(); } protected void cmdNext_Click(object sender, EventArgs e) { // Set viewstate variable to the next page CurrentPage += 1; // Reload control ItemsGet(); } protected void cmdNewest_Click(object sender, EventArgs e) { // Set viewstate variable to the previous page CurrentPage = 0; // Reload control ItemsGet(); } protected void cmdOldest_Click(object sender, EventArgs e) { } public void RepeaterMessageList_ItemDataBound(object sender, RepeaterItemEventArgs e) { // Execute the following logic for Items and Alternating Items. if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { //Are we vieing the Inbox or Sent items? if (DisplayMessages == MessageView.Inbox) { .........Do stuff } else { .........Do stuff } } } private void ItemsGet() { // this.RepeaterMessageList = (Repeater)FindControl("RepeaterMessageList"); this.RepeaterMessageList.ItemDataBound += new RepeaterItemEventHandler(RepeaterMessageList_ItemDataBound); // Populate the repeater control with the Items DataSet PagedDataSource objPds = new PagedDataSource(); if (DisplayMessages == MessageView.Inbox)//which table are we getting data from? { List&lt;Moto.Business.MessageReceived&gt; messages; Moto.Business.MessageReceivedComponent messageComponent = new Moto.Business.MessageReceivedComponent(); messages = messageComponent.GetByReceiverGUID(this.user.UserGUID); objPds.DataSource = messages; } else { List&lt;Moto.Business.MessageSent&gt; messages; Moto.Business.MessageSentComponent messageComponent = new Moto.Business.MessageSentComponent(); messages = messageComponent.GetBySenderGUID(this.user.UserGUID); objPds.DataSource = messages; //Items.Tables[0].DefaultView; } // Indicate that the data should be paged objPds.AllowPaging = true; // Set the number of items you wish to display per page objPds.PageSize = 25; // Set the PagedDataSource's current page objPds.CurrentPageIndex = CurrentPage; this.lblCurrentPage.Text = "Page " + (CurrentPage + 1).ToString() + " of " + objPds.PageCount.ToString(); // Disable Prev or Next buttons if necessary this.cmdPrev.Enabled = !objPds.IsFirstPage; this.cmdNext.Enabled = !objPds.IsLastPage; this.cmdOldest.Enabled = !objPds.IsLastPage; this.cmdNewest.Enabled = !objPds.IsFirstPage; this.RepeaterMessageList.DataSource = objPds; this.RepeaterMessageList.DataBind(); } public int CurrentPage { get { // look for current page in ViewState object o = this.ViewState["_messagesCurrentPage"]; if (o == null) return 0; // default page index of 0 else return (int)o; } set { this.ViewState["_messagesCurrentPage"] = value; } } protected void btnDelete_Click(object sender, EventArgs e) { foreach (RepeaterItem item in this.RepeaterMessageList.Items) { CheckBox chkDeleteMe = item.FindControl("chkDeleteMe") as CheckBox; TextBox test = item.FindControl("test") as TextBox; if (chkDeleteMe.Checked) { if (DisplayMessages == MessageView.Inbox)//which table are we getting data from? { .........Do stuff } else { .........Do stuff } } } // Reload control ItemsGet(); } protected Control FindControlRecursive(Control root, string id) { if (root.ID == id) { return root; } foreach (Control c in root.Controls) { Control t = FindControlRecursive(c, id); if (t != null) { return t; } } return null; } } </code></pre> <p>Any help greatly appreciated!</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload