C# - Gridview Sorting And Paging Events Are Not Firing In Embedded .ascx Controls?
Nov 5, 2010
I have a gridview that's inside a .ascx control that's dynamically embedded into another .ascx control, which is then called by a web form. The gridview will initially bind, but when any paging/sorting/command events are then triggered, I can't get any breakpoints inside the events to kick off. Additionally, when I look at the code-behind in the now-blank page, I see the old data sitting there.
what on earth is going on here? For edification, the .ascx page with the control is excerpted.
Moderators Note: THIS ISSUE IS BIG FOR ME AND EVEN IF POSSIBLE, GET THE REPLY FROM THE DESIGNER OF GRIDVIEW. I have been looking for him for long. I am really fed up with reviewing a good lot of web pages on how we can possibly customize the gridview to enable sorting and paging. So many sites have listed out a lot of information and so many guidances. But the problem is that one works out fine and the other is a burden. I really feel bad about being given the job of customizing this kind of a gridview which has no user friendly approach to it. Also, this control is rendered without the pager links inside the <tfoot> tag. I have tried the Pear Pager in php. It is that good and easy to use and compared to that, the gridview in asp.net is the worst ever control i have ever tried so far.
1. i can use the images to indicate the sorting direction 2. I can have the custom pager like
[code]
<<Previous 1 2 3 .. 7 Next >>.
[/code]
When i click the next when i am viewing the page at 3 , the pager links should change as
[code]
<<Previous 2 3 4 .. 7 Next >>
[/code]
Kindly look into this type of requirement and firstly tell me whether this is possible with the gridview control. I would like this request even to be escalated to the designers of the gridview control also, so that Microsoft comes out with a reply THAT WORKS and not the kind of stuff like surfing through a lot of links and pages and finally wasting a lot of days precious time and still breaking the head with this useless control. I have spent a lot of time in searching for a perfect way. Not writing a code that is non-standard. I am really serious b'cos I have spent weeks in customizing this control. If I dont get a solid reply atleast now, I am going to generate all the output by HTML content by custom coding.
I have created an asp.net usercontrol that should list users in a number of applications. For that purpose, the control renders a repeater (foreach application) which in turn renders a gridview (with users for that application).
The control renders fine, except the fact that columns in the gridview are not sortable. Nothing happens (no postback) when clicking the headers. Apparently, no JavaScript is rendered to perform the postback when clicking the header.
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 am binding DataView data to GridView and using paging and sorting mechanism of the GridView.
In case of sorting, I define the sort expression based on user's selection and assign the same to DataView and then bind the same to GridView.
Issue:
Everytime I sort the DataView, I see different set of rows on the same page on GridView. The issue is, the column which is used in sorting has many rows with same values. So everytime I sort DataView using sort expression and bind it to GridView, it displays different sets of rows and sorts randomly.
What should I do to make sure that it always display same rows? I cant change the sorting expression as it is selected by the user. Or only way is to append sort expression containing unique key internally ?
I need the consistent set of rows as I am operating on rows selected by users and make them editable and allow user to udate values and display the same.
Problem: it will sort and paging correctly but when after change a page, it will not display the corrected sorted order.
Protected Sub PFTGridView_PageIndexChanging(ByVal sender As Object, ByVal e As GridViewPageEventArgs) Handles PFTGridView.PageIndexChanging Dim PFTObj As New PFT Dim PFTDST As New Data.DataSet
I have a problem with the allow paging and sorting in the gridview. I have a button to export the gridview data to excel and I need to disable the paging and sorting in code behind. When I export to excel it have the link numbers of the paging and the column header as a link to sorting. I'm using VB.
I've reviewed a couple other sources and none seem to be complete, there is always a 'oh, ya, but you have to do this if you have this, or comments left about it not working etc... So this is my attempt to get a complete answer in one place. No datasourceControl, datasource being assigned programatically upon a button click event. My button click event that originally binds data to the gridview looks like this:
[Code]....
and of course the first code I try to implement the paging, doesn't work. Which is this:
[Code]....
the result is not an error, just an empty gridview. What am I missing? That's just an example of most of the examples out there saying how simple it is and you only need a few lines of code being wrong, or maybe not wrong, but incomplete. So I'm not going to even bother with the bidirectional sorting examples I came accross as there are usually comments about it not working, or not actually being bidirectional. I'm sure it is simple, once you actually have the information you need, getting that information is the harder part. So, anyone here care to take a shot at a complete example of implementing paging and bidirectional sorting on a gridview when not using a datasourceControl?
I've been reading up on the problems with dynamically created controls and how they have been solved. The posts I have come across are creating the controls in a panel or some other open place. I can't seem to get my checkbox to fire the event from inside a gridview. below is the code behind from inside the GridView PreRender event.
[Code]....
..And the Checked Event.. [Code]....
So after all this, nothing happens. I get the postback flash but my command inside the checked event doesn't fire.I tried putting the dynamic creation of the checkbox in Page Load with no effect.. I think because I can't place the checkbox inside the GridView under page load.
I started learning LINQ, So i thought of just creating gridview with sorting and paging using objectdatasource using LINQ. So i got this link
[URL] which Brian Orrel tell us how to do using IQueryable Interface. but i have nearly 300 lines of stored procedure which joins nearly 20 tables. so i thought of creating a stored procedure and using that instead of IQuerytable.
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:
It has been more than 2 days since I had started searching for the answer and I still don't know how to do it.
I have empty gridview that is filled with data depending of the parameters given. The gridview is used to track changes user had made to the database.
In the first dropdown list the user selects from which table (or all tables) to display the data. From the second dropdown list the user selects from which column (or all columns) of the previously selected table to display data. In the first textbox the user enters the search term and in the third and fourth textboxes the user enters the date range in which the changes occurred.
After clicking button the data within the given parameters should be displayed. The problem is that data is displayed fine, but I can't manage to get sorting and paging to work so if possible, give concrete answer because I'm pretty sure I googled one half of the web during these 2 days. :)
Here is the code for the .aspx file:
[Code]....
Here is the codebehind:
[Code]....
To sum everything up... My question is: "How to enable sorting and paging for this code?"
Can someone point me to a tutorial that shows how sorting is done with small images showing the sort direction. I'm using linq-to -sql so I'd like something that shows how dynamic linq works.
I have a nested GridView that is placed inside a ListView. The GridView renders perfectly fine with all the entities that are bound inside its datasource.
Each record in my gridview has two buttons - 'delete' and 'edit'. The issue that I am having is that the methods wired to each of these buttons never get fired.
I think the reason for this behaviour is because my ListView's data binding happens only on the first page load, and not on every subsequent postback. As a result, when a postback happens, the events of the nested gridview are never wired up again - hence my methods are not getting fired.
Here is what my code [simplified] looks like:
[code]...
I tried modifying the above code and removing the "!IsPostBack" clause, and the events actually got fired when a button inside the GridView was clicked. However, I do not feel comfortable doing a databind on every postback and think there should be a better solution than that.
I want to use a gridview with sorting and paging to display data from an SQL server, the query uses 3 joins and the full text search containstable. The from part of the query uses all 3 tables in the join.What is the best way to do this? I can think of a stored procedure, SQL directly in the SQLDataSource and creating a view in the database.I want good performance and would like to leverage the automatic sorting and paging features of the gridview as much as possible.
Edit:About size, I suspect very few records, total about 1000 and a query would typical result in no more than 100 records and most times much less.
I am having a gridview with an object datasource binded in the markup(aspx page).When page loads it directly works fine with all sorting and paging properties.However, i need to filter display on gridview so i have to change the datasource of the gridview on the code behindIt works fine.. i mean the filtering and displaying is good but paging and sorting doesnt work.