All works brilliantly the first time around, the basket items are bound to Basket objects and everything is great.
However, when I receive an ItemCommand from my repeater, and update the basket contents (Note: No adding or removing is done here, just updates the quantity) then I rebind to see the latest values, and BOOM! Null reference - no Basket object in the user control Page_Load. This is despite tracing through to see that the BindItems() method is called as usual, and the Baskets are there.
Why would a button inside a Repeater not fire the Repeater's ItemCommand event? Is there a way to force it to do so? ViewState is Enabled. zn the code below, btnApprove and btnDelete are the buttons in question:
My repeater is available in a user control and I added the user control as a web part to an existing webpartzone. I could see all rows in the repeater (along with buttons). Once I click the (any) button, it loses all the rows and itemcommand never fires. I am using ASP.NET 4.0
I am building a website whereby people, before checking out of the shopping cart (and transferring to the payment iframe) can select which items from the shopping cart list to delete. The results from the shopping card are listed in a Repeater control. There is a Button in the Repeater which deletes a record from the database (used LINQ to SQL to do that.)
THe problem is that the ItemCommand event doesn't fire when i click the button. I tried 'response.write(test)' and it still would not work. It is as if the repeater cannot interact with the commands. It does render the results tho.
I am building a website whereby people, before checking out of the shopping cart (and transferring to the payment iframe) can select which items from the shopping cart list to delete. The results from the shopping card are listed in a Repeater control. There is a Button in the Repeater which deletes a record from the database (used LINQ to SQL to do that.)
The problem is that the ItemCommand event doesn't fire when i click the button. I tried response.write(test) and it still would not work.
It is as if the repeater cannot interact with the commands. It does render the results though.
switch(e.CommandName) { case "Edit": //make editTemplate div visible HtmlGenericControl divEditContact = (HtmlGenericControl)e.Item.FindControl ("divEditContact"); divEditContact.Visible = true; break; case "Update": Employee updateEmployee = new Employee { employeeName = txtName.Text: employeeEmail = txtEmail.Text: } updateEmployee = API.UpdateEmployee(updateEmployee); //display lblUpdateConfirm visible to True // so user sees this confirm messge in the newly updated ItemTemplate }
How can I access my lblUpdateConfirm and turn its Text state to visible from inside the ItemCommand, so that when the user sees the newly updated ITemTemplate, the label is showing the "Update Confirmed" message?
I've got a repeater that's used to display the output of a dynamic report that takes criteria from webcontrols on the page. Within the repeater's ItemDataBound method I'm adding controls (Linkbuttons for sorting by column values) dynamically to the header of the repeater based on values selected in a checkbox list and at this point setting the CommandArgument and CommandName properties of the linkbuttons.
The issue is that when the linkbuttons are clicked they don't fire the ItemCommand event although they are clearly being correctly created and added to the header (there is some additional code to set the cssClass, text etc. and this works as expected.) The first column header in the repeater is set in the markup and the itemcommand event fires correctly on this one only. When the other column headers are clicked the repeater rebinds as programmed, but the columns are not dynamically re-generated.
Nightmare.ascx <asp:repeater runat="server" id="rptReport" OnItemDataBound="rptResults_ItemDataBound" OnItemCommand="rptResults_ItemCommand" EnableViewState="true"> <headertemplate> <table> <tr runat="Server" id="TRDynamicHeader"> <th> <!-- This one works --> <asp:Linkbutton runat="server" CommandName="sort" commandArgument='<%# Eval("Name")%?' /> </th> <!-- additional header cells get added dynamically here --> </tr> </headertemplate> <itemTemplate> <td><%# Eval("Name")</td> ... </itemTemplate> </asp:repeater> Nightmare.ascx.cs protected void PageLoad(object sender, eventArgs e){ if (! isPostback){ setupGui();//just binds dropdowns etc. to datasources } } protected void btnRunReport_Click(...){ List<ReportLines> lstRep = GetReportLines(); rptReport.DataSource = lstRep; repReport.DataBind(); } protected void rptReport_ItemDataBound (...){ if (e.Item.ItemType == ListItemType.Header) { foreach (ListItem li in chbxListBusFuncs.Items) { if (li.Selected) { th = new HtmlTableCell(); lb = new LinkButton(); lb.CssClass = "SortColHeader"; lb.CommandArgument = li.Text.Replace(" ", ""); lb.CommandName = "sort"; lb.Text = li.Text; th.Controls.Add(lb); ((HtmlTableRow)e.Item.FindControl("TRDynamicHeader")).Cells.Add(th); } } } if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { //Row level customisations, totals calculations etc. } } <!-- this only gets called when the 'hardcoded' linkbutton in the markup is clicked. protected void rptReport_ItemCommand(object sender, Eventargs e){ lblDebug.Text = string.Format("Well? What's Happening? -> {0}:{1}", e.CommandName, e.CommandArgument.ToString()); } (The only thing that can call the runreport routine is a single button on the page, not shown in the code snippet above.)</textarea></p> <input type='hidden' name='ID[3]' value='82079' /> <input type='hidden' name='URL[3]' value='http://forums.asp.net/t/1472917.aspx' /> <input type='hidden' name='CAT[3]' value='Forms Data Controls' /> <input type='hidden' name='BOARD[3]' value='microsoft' /> <input type='hidden' name='P_DATE[3]' value='Sep 21, 2009 02:16 AM' /> <input type='hidden' name='RANDOM[3]' value='uck4OZUSh' /> <input type='hidden' name='REPLIES[3]' value='6' /> <input type='hidden' name='USER[3]' value='aziz' /> <p><input class=subject type='text' size='90' name='SUBJECT[3]' value='Forms Data Controls :: ValidationGroup causes button not to fire ItemCommand event' /><select name='INDEXED[3]'><option value='1' selected>UPDATE</option><option value='2'>DELETE</option></select>Sep 21, 2009 02:16 AM - Replies: 6 CAT: Forms Data Controls<a target=_blank href="http://forums.asp.net/t/1472917.aspx">View</a></p> <p> <textarea rows=10 cols=100 name='POST[3]' onfocus='setSelRange(this, 0, 0)'/>
I have a page with a couple of RequiredFieldValidators, each in its own ValidationGroup. One of the RequiredFieldValidator controls is inside a Datalist and the submit button triggers the relevant DataList_ItemCommand. It works just dandy until I add the ValidationGroup to the button, at which point clicking on the button no longer fires the DataList_ItemCommand event. Here is the HTML
[Code]....
Note that the ValidationGroup name is there, and it is unique. No other ValidationGroups exist with that name. As it stands, this code does NOT fire the DataList_ItemCommand event, so no update occurs. However if I remove the ValidationGroup declaration from the Button control, the event fires properly.
i have a repeater with a button in the footer template which i want to be able to update any of the items that are added (update quantites/totals/delete the item). however the 'UpdateOrderDetails' event never fires when the button is clicked. here is the code within the repeater...
<ItemTemplate> <tr> <td> <asp:CheckBox ID="chkDelete" runat="server" /> <asp:HiddenField ID="hidProduct_Key" runat="server" /> </td> <td><asp:Literal ID="ltlProduct_Name" runat="server" /></td> <td><asp:Literal ID="ltlProductOption_Size" runat="server" /></td> <td><asp:Literal ID="ltlProductOption_Code" runat="server" /></td> <td><asp:TextBox ID="txtQuantity" runat="server" /></td> <td><asp:Literal ID="ltlItemPrice" runat="server" /></td> <td><asp:Literal ID="ltlLineTotal" runat="server" /></td> </tr> </ItemTemplate> <FooterTemplate> <asp:Panel ID="pnlFooter" runat="server" Visible="False"> <tr id="trTotalExVAT" runat="server"> <td colspan="6">Total (ex VAT)</td> <td><asp:Literal ID="ltlTotalExVAT" runat="server" /></td> </tr> <tr id="trVAT" runat="server"> <td colspan="6">VAT</td> <td><asp:Literal ID="ltlVAT" runat="server" /></td> </tr> <tr> <td colspan="5"> <asp:Button ID="btnUpdate" OnClick="UpdateOrderDetails" Text="Update" runat="server" /> </td> <td>Delivery</td> <td><asp:Literal ID="ltlDelivery" runat="server" /></td> </tr> <tr> <td colspan="6">Total</td> <td><asp:Literal ID="ltlTotal" runat="server" /></td> </tr> </asp:Panel> </table> </FooterTemplate> the 'updateorderdetails' event in code behind is here Public Sub UpdateOrderDetails(ByVal s As Object, ByVal e As RepeaterCommandEventArgs) For Each objRepeaterItem As RepeaterItem In rptOrderDetails.Items Select Case objRepeaterItem.ItemType Case ListItemType.AlternatingItem, ListItemType.Item Dim chkDelete As CheckBox = objRepeaterItem.FindControl("chkDelete") Dim hidProduct_Key As HiddenField = objRepeaterItem.FindControl("hidProduct_Key") Dim txtQuantity As TextBox = objRepeaterItem.FindControl("txtQuantity") ' check for deletion or update If chkDelete.Checked Then Me.Basket.RemoveProduct(hidProduct_Key.Value) Else ' check for update If IsNumeric(txtQuantity.Text) AndAlso CInt(txtQuantity.Text) >= 0 Then Me.Basket.Products(hidProduct_Key.Value).Quantity = txtQuantity.Text End If End If End Select Next ' update order details BindOrderDetails() End Sub but this procedure is never called when the button is clicked, so wondered what i need to do to get this working </textarea></p> <input type='hidden' name='ID[5]' value='49574' /> <input type='hidden' name='URL[5]' value='http://forums.asp.net/t/1522852.aspx' /> <input type='hidden' name='CAT[5]' value='Web Forms' /> <input type='hidden' name='BOARD[5]' value='microsoft' /> <input type='hidden' name='P_DATE[5]' value='Feb 07, 2010 06:01 AM' /> <input type='hidden' name='RANDOM[5]' value='OoKSV9VFH' /> <input type='hidden' name='REPLIES[5]' value='3' /> <input type='hidden' name='USER[5]' value='aziz' /> <p><input class=subject type='text' size='90' name='SUBJECT[5]' value='Web Forms :: ItemCommand not get fire of datalist in IE' /><select name='INDEXED[5]'><option value='1' selected>UPDATE</option><option value='2'>DELETE</option></select>Feb 07, 2010 06:01 AM - Replies: 3 CAT: Web Forms<a target=_blank href="http://forums.asp.net/t/1522852.aspx">View</a></p> <p> <textarea rows=10 cols=100 name='POST[5]' onfocus='setSelRange(this, 0, 0)'/>
I have imagebutton inside datalist.....the problem is that onclick event of serverside not get executed for only IE ..but its work fine for mozzila....i m not getting what wrong in this code.
I have a repeater which does quite expensive processing when it is populated. It gets the info from a web service which is itself a federated search service and will take 15 to 20 seconds to return results.
In each repeater item/alternatingitem, i have 3 imagebuttons doing some actions (saving in session some ID's, updating some custom collections...) , the problem is when clicking on one of the buttons, the repeater will trigger the command and then databind again, which takes quite some time to process again..
The following code successfully displays a record in a FormView and sets the FormView mode to 'Edit' when the user clicks on a LinkButton within a Repeater, however the record is not Updated. If I don't change the .SelectCommand and call .DataBind, I'm able to update the first record that is displayed. Naturally that's a moot point because the idea is to be able to update the record that the user selects in the Repeater.Because of the design of the FormView and Repeater, the record *must* be updated via the FormView. Updating the record via the Repeater is not an option.
What's the difference between binding for example a column called ("Name") in both cases ? and is there's any performance difference ?1- Assigning the data in the mark-up
2- defining a control object for every control inside the repeater ItemTemplate and find it and then assign the data in the column "Name" to ite.Item.FindControl("Name_Lbl")
Now I need to bind the repeater with the combined results of above 2 type collection with the repeater column names "Full Name" and "Country".I am planning to add a new Type_C.cs in the application layer and iterate the A and B type collection to assign the properties in C and finally bind the repeater with Type_C.Can someone let me know if there is better way to go with such kind of issue?
I use a label for sending my html data to the view(ASP.net.). Below you see a short version of my code-behind page:
[Code]....
This practice is in my eyes not the best one. The html-code is much bigger in the real situation and I don't like that in my code-behind page. I would only send the image source to the view and bind them in some ASP.net tool. I think the ASP.net repeater is the best. But I have no idea, how to do this?
The issue is that the length of the feed changes regularly and rather than selecting a range of movies with the XPATH (i.e. 1-3 in the XML) I need to select 3 totally random movies from the XML and bind this back to the repeater.
I have this array: string[,] productData = new string[5,7]; I bind it to a repeater and a call a method like: <img src="<%# getPhoto1WithReplace(Container.ItemIndex) %>" Which is defined like: public String getPhoto1WithReplace(Object itemIndex) { int intItemIndex = Int32.Parse(itemIndex.ToString()); if (productData[intItemIndex, 3] != null) return this.ResolveUrl(productData[intItemIndex, 3].ToString()); else return String.Empty; } I do not understand why it calls getPhoto1WithReplace with itemIndex as 5. My array has 5 indexes: 0,1,2,3,4, so How Container.ItemIndex can be 5?
I'm following a tutorial from [URL] to create a better menu with submenus. Does anyone know how to convert this inline code to code behind? I'm not a big fan of inline code but I have no idea on how to convert it to code behind.
I have a couple of Checkbox controls in the Item Template of a Repeater and am trying to set them (checked or not) based on an underlying data value. With Labels the <%# Bind... > syntax can be used but there does not seem to be an equivelent for a Checkbox.
So I have moved into the code, specifically the ItemDataBound handler of the Repeater control but cannot seem to instantiate the Checkbox controls.
In the handler repProjectList_ItemDataBound(object sender, RepeaterItemEventArgs e) I can instantiate the Repeater by casting sender or the RepeaterItem by using e.item and both have FindControl() methods but neither seem to find my Checkbox.
Further, once I am able to 'find' the Checkbox, I'm not sure how to reference the various values in the underlying data source.
The title pretty much explains it. I want to bind a single item to a detail type control. I can bind to a repeater perfectly fine and obviously only one item will be displayed. It seems like there would be a better suited control for this. I know about FormView and DetailsView but they both generate a table which I don't really want. Something similar to the Repeater since it doesn't generate any content other than what you put in the template.
i have a database of values that I am rendering in a table via the repeater control. (Previously I was using a gridview but I know require a repeater) I have a checkbox being 'repeated' for each record and I can get the id of each row to do some logic, but what I cannot get is whether it is checked or not as the value is null. As the database has no null values, I can only asume it is not binding for the checkboxes as current true values do not have a check in the box. The onCheckedChanged event carries out the logic required to change whether record is disabled via the database. With a gridview
Checked='<%# Bind ("Disabled")%>' was enough <td class="GridCentre"[code]....
is this done with the itemdatabound event? and how is it done?
I'm trying to bind a value to a dropdownlist. Here how the code looks like in the aspx page...Bind the textboxes below is not a problem...but its not working with the dropdownlist..
So basically, what i want is the value selected from the dropdownlist to be remembered after i press next button and back button..