VS 2010 - GridView Updating Event When GridView Has Paging
Dec 1, 2013
I have a GridView that is populated via a dataset that contain 1 table. I have enabled paging on my GridView.
In my Updating event, I handle the new values and call a store proc to update my database with the new values for the selected row. In order to minimize the call to the DB, instead of getting back a new dataset with the updated values, I simply update the row of the dataset that I have in session with the new values and then I bind back my gridview.
The problem that I have is since I have let's say 5 pages of 10 row... If I update a row on the first page as soon as I click update, the gridview will show the new values. However, if I select page 3 for example, click on update and update the values, once the update is done, the gridview will still be displayed with the old values.
I have a gridView that is populated with a dataset from an Oracle Database.
When I click on the EDIT button, it will redisplay my gridView with textboxes so I may make some changes.
Let's say one row is currently:
OPEN_TIME = 1 CLOSE_TIME = 2
When I click EDIT, 1 and 2 are in a textbox. If I change both values to 5 and click UPDATE, it will fire a RowUpdating..
Here is the code from my APP:
Private Sub gvBusinessHours_RowUpdating(sender As Object, e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles gvBusinessHours.RowUpdating Dim strOpenTime As String = DirectCast(gvBusinessHours.Rows(e.RowIndex).FindControl("txtOpenTime"), TextBox).Text Dim strCloseTime As String = DirectCast(gvBusinessHours.Rows(e.RowIndex).FindControl("txtCloseTime"), TextBox).Text End Sub
The problem is the values I am getting are the OLD ones and not the new ones... I am getting 1 and 2 and not 5 AND 5...
I have been researching this issue for a couple of days and have found a lot written about it, but none of what I have found has fixed the problem I am having.
I work for a school system, and my principals are wanting to take a list of the staff members at their school and create staff lists for different activities they perform. I thought I would load the staff into Gridveiw1, and when they select a record have it move over into Gridview2 and "delete" from Gridview1.
I am loading my full staff into a datatable (SQL Server backend), and setting this datatable as my gridview1 datasource. At this point, it loads great, and cosmetically speaking sorts and pages fine. The problem occurs in the codebehind after a Sort or Page change has occurred -- when I select a record and move it over into Gridview2, it is moving the original record that was at that postion on Page 1 instead of the sorted or "new page" record.
So if the initial list comes in as:
Teacher 1 Teacher 2 Teacher 3
The sort button is hit so that the list now starts out like:
Teacher 7 Teacher 13 Teacher 5
If they select "Teacher 13" to be moved over after the sort, instead it is still moving over "Teacher 2" -- the initial teacher in that index before the sort.
The Gridview setup on my aspx page looks like this:
I have a gridview control on a .aspx page (content form).
Paging is enabled on gridview control. It displays the page numbers at the bottom of the .aspx page. When I click on a page number say 3, I get error saying the "Exception Details: System.Web.HttpException: The GridView 'GridViewReconresults' fired event PageIndexChanging which wasn't handled."
Do I need to write special code to handle the paging? Because there is a grid in another page and it has bound columns and I didn't write any code for paging and it works perfectly fine.
Here is the code in the .aspx page that I have problem.
I have a GridView with ItemTemplate and EditTemplate. There is some text boxes in EditTemplate. I want to update records myself using EditTemplate controls. Which event of GridView I should use? If I use Telerik's RadGrid then what event is better?
This should be easy enough but I can't seem to get it to work. I have a master list table someone forwarded me a separate email table. So, I wrote a quick and very inefficient block to add the emails to the master list. Everything works fine on the form as datagridview1 shows my changes and states the numbers of rows affected. When I check the actual mdb file though, no changes are ever made.
i m having sub-grid/Nested Grid concept using grid view control ., i.e., inside grid in sixth cell i m having another grid.,
i n Sub-Grid i m having The Follwing Events OnRowDataBound="Gdclmline1_RowDataBound" OnRowEditing="Gdclmline1_RowEditing" OnSelectedIndexChanging="Gdclmline1_SelectedIndexChanging" OnRowUpdating="Gdclmline1_RowUpdating" ., all the events are working Fine Except OnRowUpdating="Gdclmline1_RowUpdating" this event.,
we are developing the software in Visual Studio 2008 ., our Server is Visual Studio 2010 .,
in my development machine its working fine., but in Server machine its row updating event not working .,
note:- we have used proper conversion method from vs 2008 to vs 2010
I have a GridView that uses custom paging inside an UpdatePanel (so that the paging and sorting of the gridview don't cause postback). The sorting works fine, but the paging doesn't. The PageIndexChanging event is never called. This is the aspx code:
<asp:UpdatePanel runat="server" ID="upSearchResults" ChildrenAsTriggers="true" UpdateMode="Always"> <ContentTemplate> <asp:GridView ID="gvSearchResults" runat="server" AllowSorting="true" AutoGenerateColumns="false" AllowPaging="true" PageSize="10" OnDataBound="gvSearchResults_DataBound" OnRowDataBound ="gvSearchResults_RowDataBound" OnSorting="gvSearchResults_Sorting" OnPageIndexChanging="gvSearchResults_PageIndexChanging" Width="100%" EnableSortingAndPagingCallbacks="false"> <Columns> <asp:TemplateField HeaderText="Select" HeaderStyle-HorizontalAlign="Center"> <ItemTemplate> <asp:HyperLink ID="lnkAdd" runat="server">Add</asp:HyperLink> <asp:HiddenField ID="hfPersonId" runat="server" Value='<%# Eval("Id") %>'/> </ItemTemplate> </asp:TemplateField> <asp:BoundField HeaderText="First Name" DataField="FirstName" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" SortExpression="FirstName" /> <asp:BoundField HeaderText="Last Name" DataField="LastName" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" SortExpression="LastName" /> <asp:TemplateField HeaderText="Phone Number" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" > <ItemTemplate> <asp:Label ID="lblPhone" runat="server" Text="" /> </ItemTemplate> </asp:TemplateField> </Columns> <PagerTemplate> <table width="100%" class="pager"> <tr> <td> </td> </tr> </table> </PagerTemplate> </asp:GridView> <div class="btnContainer"> <div class="btn btn-height_small btn-style_dominant"> <asp:LinkButton ID="lbtNewRecord" runat="server" OnClick="lbtNewRecord_Click"><span>Create New Record</span></asp:LinkButton> </div> <div class="btn btn-height_small btn-style_subtle"> <a onclick="openParticipantModal();"><span>Cancel</span></a> </div> </div> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="gvSearchResults" EventName="PageIndexChanging" /> <asp:AsyncPostBackTrigger ControlID="gvSearchResults" EventName="Sorting" /> </Triggers> </asp:UpdatePanel> In the code behind I have a SetPaging method that is called on the GridView OnDataBound event: private void SetPaging(GridView gv) { GridViewRow row = gv.BottomPagerRow; var place = row.Cells[0]; var first = new LinkButton(); first.CommandName = "Page"; first.CommandArgument = "First"; first.Text = "First"; first.ToolTip = "First Page"; if (place != null) place.Controls.Add(first); var lbl = new Label(); lbl.Text = " "; if (place != null) place.Controls.Add(lbl); var prev = new LinkButton(); prev.CommandName = "Page"; prev.CommandArgument = "Prev"; prev.Text = "Prev"; prev.ToolTip = "Previous Page"; if (place != null) place.Controls.Add(prev); var lbl2 = new Label(); lbl2.Text = " "; if (place != null) place.Controls.Add(lbl2); for (int i = 1; i <= gv.PageCount; i++) { var btn = new LinkButton(); btn.CommandName = "Page"; btn.CommandArgument = i.ToString(); if (i == gv.PageIndex + 1) { btn.BackColor = Color.Gray; } btn.Text = i.ToString(); btn.ToolTip = "Page " + i.ToString(); if (place != null) place.Controls.Add(btn); var lbl3 = new Label(); lbl3.Text = " "; if (place != null) place.Controls.Add(lbl3); } var next = new LinkButton(); next.CommandName = "Page"; next.CommandArgument = "Next"; next.Text = "Next"; next.ToolTip = "Next Page"; if (place != null) place.Controls.Add(next); var lbl4 = new Label(); lbl4.Text = " "; if (place != null) place.Controls.Add(lbl4); var last = new LinkButton(); last.CommandName = "Page"; last.CommandArgument = "Last"; last.Text = "Last"; last.ToolTip = "Last Page"; if (place != null) place.Controls.Add(last); var lbl5 = new Label(); lbl5.Text = " "; if (place != null) place.Controls.Add(lbl5); }
The paging works if I don't use custom paging, but I really need to use the custom paging. I can't figure out why the PageIndexChanging event isn't fired when I'm using the custom paging.
in my webpage gridview is there in that gridview gridTags_Updating event is there.when am keep a breakpoint inin that event will not fire as well as when am clicking update button gridview is disappear
I have a Modified Date and Modified By column in my gridview and I want them to be updated with the current date and current user any time a user updates the row.
I converted my columns to template fields and the textboxes in the edititemtemplate are bound to my sql data columns "ModifiedDate" and "ModifiedBy"
Then I added the attached code in my RowUpdating event.
When I test the code and click the Update link on my gridview I don't get an error but the values don't update either. I put a breakpoint on the code and when I hover over "ModifiedDateLabel.Text" I see the old value of the field so I know I'm accessing the control correctly.
Is there a way to use the GridView paging and having the links not use JavaScript. So that when you click on the page number 5 (for example) that link is a hyperlink.
I have a parent gridview5 with child gridview 6, today i deployed it to our dev server and on that server we have alot more records, so for the nested gridviews i need to enable paging on the parent gridview5. Doing so works fine, until i make a selection within the child gridview6, once any selection is made, and i try to page the page throws an error, i have the following bound to the parent gridview5.
In my asp.net Page I am using gridview. I am binding the gridview on page load and on paging event with one method. suppose as Bindgridview1();.
There is one search button for searching the records of user with different method suppose as Bindgridview2(); .
when I am searching the records with Bindgridview2(); paging doesn't work and directly bind with Bindgridview1(); which is on page load when I clicked next page.
I'm trying to extend the GridView control to enable sorting and paging for any situation.
When using my control I am fetching data from a database and filling a DataSet with it, then binding the GridView upon every page load. My first question would be, is this the correct approach?
To sort the GridView I am overriding the OnSorting method which stores the sort expression and direction in the ViewState, then creates a DataView and utalises the Sort method to sort the underlying data. It then sets the Data Source to this DataView and rebinds the GridView.
Paging is handled by OnPageIndexChanging which simply sets the PageIndex property and again rebinds the GridView.
My problem is; when any control causes a postback my GridView is no longer sorted, presumably because it is persistently rebound. If I don't rebind it then the GridView is empty on postback since the data isn't automatically stored in the ViewState. I have considered saving the data source in the ViewState but I would assume that this is bad practice for large amounts of data? - also DataViews are not seralisable.
The only solution I can think of currently is to override OnDataBound and sort the data every time. This results in a double sort when paging triggers a postback which seems inefficient. Code illustration of this below,
[Code]....
I'm looking for the cleanest 'best practice' solution as this is a learning exercise more than anything else.
I have a parent gridview which has a child gridview in the itemsTemplate. Both are binded to different SqlDataSources. I can successfully update and delete rows in the child gridview. After updating in the child gridview, some related data in the parent gridview are not updated automatically. So i have placed ParentGridview.Databind() in the rowupdated event of child gridview. But it doesnt look working.
In a nested GridView (GridView inside a template column of parent GridView). I am binding child GridView to a DataTable in parent GridView's RowDataBound event. this works as it should. But the problem i am facing is in Child GridView's RowDataBound Event, when i try to access e.Row.DataItem property it returns null. I am expecting it to return DataRowView Type. which i will then use to set values of TextBox's.
My question is, can I control the style of the paging element separately of top and bottom, I have set the paging to appear in both top and bottom of the gridview, and I want to see that the top pagination is little high up in the page, to do that I used the cssClass and set margin-top:20px and made the position: absolute, this does change the position of the top paging area and set it rightly for me, but the bottom pagination has also come up as a result and now sits inside the grid data!!
I hoping someone could answer a question for me. I am relatively new to developing web applications with .NET and I have question I can't seem to find a straight answer to. When allowing paging of a GridView control, how does retrieve the data per-page? Is all the data stored into an object, and then displayed x amount of rows at a time? Or, when moving from page to page, is it executing each time but restraining the result to the specified amount of rows?