Forms Data Controls :: Sorting A GridView That Is Populated By An ObjectDataSource?
Mar 11, 2010
I am having some difficulty enabling sorting on a gridview that has data in it that has come from an objectdatasource.
The AllowSorting="True" function doesnt work for ObjectDataSource so I need to find a work around...I am guessing that I will need to do something in code in order to get this off the ground.
not quite sure where I'm going wrong here. I'm trying to manually handle sorting in a Gridview that is populated with the following data source:
[Code]....
[Code]....
[Code]....
At the moment, nothing is happening when I click on the column headings. I ran it in debugging mode in Visual Studio and put a breakpoint on the Sorting event handler. I noticed that the variable dtSortTable is empty even after the TryCast(VacanciesGV.DataSource, DataTable). If I hover over this statement in debugging, it shows the data from the file system, so it does appear to be reading it.
I have a gridview being data bound by an objectdatasource which points to a BLL/DAL. I have paging and sorting enabled within the gridview. I have the fields configured in the look/fell I want from a templatefield. This templatefield has the sort expression (date) I want things to be sorted by. All this works as it should and I have no issues with it.But, the issue is that when I click on the header to sort asc/desc by date, I have to click on it twice for it switch to descending order. E.g. I hit the webpage and it lists all the information in the gridview, sorted by date, ascending order. If I want to sort by descending order, I have to click the date header twice in order for the gridview to sort the information in descending order; the clicks cause a post-back and the whole screen is refreshed.
I have a gridview being populated by an ObjectDataSource (ODS). The ODS is calling a BLL to get information from a database table. The information returned is all determined by a participantID. This works fine normally.
The issue is that I'm getting an exception thrown when the participantID isn't listed in the database table; which is possible until their information is inserted and updated on this database table. The information is entered when someone visits a webpage, their information and date/time stamp is inserted/updated to this table, but not until then.
Do I edit my ODS or the BLL to check for a null return and handle this exception? How would I do this as well?
I want to sorting via clicking header ( kod , aciklama, yeri, are headers ) with list view component and ObjectDataSource. ObjectDataSource use komponentListesi() method for selecting. How can i sorting with use listview component.
i am building my objectdatasource dynmically when certain buttons are clicked on the page.. and with that the gridview is being displayed with the results of the objectdatasource that was built.
So my gridview code looks like this:
[Code]....
How can i enable sorting and paging if the datasource is being built on button click event?
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.
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 a gridview which contains a templatefield. Inside this is an ImageButton and a dropdownlist. This is all created in the aspx page, although the ddl list items are populated in the RowDataBound event in the vb page. When i change the selected item in the drop down list and hit the imagebutton, the selected item is not maintained after postback. Instead the first record is displayed in the dropdownlist. I have wrapped an If Not Page.IsPostback around the datasource and databind's but this doesn't help. I have tried enabling viewstate in all areas on the page too, but still nothing. The list items for the ddl must be created on RowDataBound also. As far as I am aware, my ddl is not really dynamic, its just the list items which I add in the code behind which are classed as dynamic.
I have a gridview thats being populated from an excel file that is loaded through a fileupload control. I want to save the contents of that gridview to a table in my SQL database. I've searched the web and tried to loop through the gridview, but failed at it.
I have the following code: using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using Oracle.DataAccess.Client; // ODP.NET Oracle managed provider using Oracle.DataAccess.Types;
namespace MyTestApp { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { OracleConnection conn = new OracleConnection("User Id=UID; Password=PWD; Data Source=XE; Pooling=false"); try { conn.Open(); } catch ( OracleException oe ){ Console.WriteLine("ERROR : " + oe.Message); } if ( !Page.IsPostBack ) { if (conn.State == ConnectionState.Open) { // get data GetMoleculesToShow(conn); } } // clean up connection conn.Dispose(); } static void GetMoleculesToShow( OracleConnection conn ){ String division; String rxotc; String molecule_name; String prodnum; String proddesc; String molecule_class; String nonactive; // create command object and set attributes OracleCommand cmd = new OracleCommand("schema.package.procedure", conn); cmd.CommandType = CommandType.StoredProcedure; //Bind values cmd.Parameters.Add("mol_to_show_cur", OracleDbType.RefCursor); cmd.Parameters[0].Direction = ParameterDirection.Output; try { // Execute command, have parameters populated cmd.ExecuteNonQuery(); // Create OracleDataAdapter, data provider object to populate dataset OracleDataAdapter da = new OracleDataAdapter(cmd); //Populate dataset with "molrefcur" DataSet ds = new DataSet(); da.Fill(ds, "mol_to_show_cur", (OracleRefCursor)(cmd.Parameters["mol_to_show_cur"].Value)); //Verify dataset is begin populated //DataTable dt = ds.Tables[0]; //foreach ( DataRow dr in ds.Tables[0].Rows ) //{ // division = dr["division"].ToString(); // rxotc = dr["rxotc"].ToString(); // molecule_name = dr["molecule_name"].ToString(); // prodnum = dr["prodnum"].ToString(); // proddesc = dr["proddesc"].ToString(); // molecule_class = dr["molecule_class"].ToString(); // nonactive = dr["nonactive"].ToString(); //} if (ds.Tables[0].Rows.Count != 0) { // display dataset values GridView gvMolecules = new GridView(); gvMolecules.DataSource = ds.Tables["mol_to_show_cur"].Rows; gvMolecules.DataBind(); } } catch (OracleException oe) { Console.WriteLine("ERROR : " + oe.Message); } finally { cmd.Dispose(); } } } }
The dataset is being populated, however when the page renders, the data nor the gridview are visible. I have tried using both IE and Firefox, binding / not binding the columns, AutoGenerateColumns Y / N with no success. As I am new to all of this ( VS2008, ASP.NET, C# ) I can't help but to think I am overlooking something basic.
I am using the following : - VS 2008 - MS Vista SP2 - Oracle XE ( local )
I'm a little new in ASP.NET, so i don't know how the .NET machine fully works..I'm using two strategies to solve my problem, both invoked by a Button.Click event, but i don't know which one is better..My worries are about the server overload and page load time.This is the regular approuch i've used..
[Code]....
The second one is by using a funtion (named checkIfNumberExistsInDataTable) that does a binary search in a datatable to find a number
conn.Open() Dim dr As SqlDataReader = cmd.ExecuteReader Dim da As New DataTable()
I'm facing a wierd problem with GridView and ObjectDataSource. I bind GridView to my business objects via ObjectDataSource. Everything was working fine until I decided to add a new field in my buisness object and wanted to add a column to GridView to show it. Somehow that column is NOT shown in the GridView's list of available columns. I have tried refreshing schema, rebinding, etc. I'm using GridView inside a user control which is used as a web part. Does that make a difference ?
I got a web page, it has a tabcontainer, within each tab, there will be a gridview, all the tabs and gridview are created at run-time, i have only one code, that I will loop through to create all those tabs and gridview. When I apply the sorting, and I click on the column name on any grid, it returned an error saying index was out of bound. BUT, when there is only ONE grid view created, it is working fine, I suspect it mixed up all the grid view's id and so on. But I have assigned different ID to gridview
I have the gridview inside another gridview, i want to sort that both gridviews, I don't know how to achieve using asp.net 3.5 visual studio 2008 c# code behind. Following are my aspx page,
that aspx page contains gridview that contain one more gridview inside in it.Now i want to sort out both the grid i.e)claimgrid and Gdclmline1 i want code in c#.
We do have a search page for customers which returns a list of data from a table.
Once we select on an item it should redirect to another page with customerId as a querystring parameter..
Now the problem is we have to save all the customerIds and need to send them to display page..and need to select next one once they done with previous one without going to the search page again..
Example:
if they got 10 customers in the search page then we need to send all 10 ids to display page by starting display of firstone and once they select next button on display page they have to move on to the next cutomer from that list..if they reached the end of list they have to start again from the first...we need to avoid the user going to the search page for each customer every time...
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 grid that receives products over a GetList methods via ObjectDataSource. The Product class contains also a Object Supplier. If I change in the drop down list of the grid the supplier for a product and I click update the ID of the suppliier is still the same. I have debugged the call of the update method and checked the parameter in the product object. I wrote the following code in the SelectedIndexChanged event and the text box shows the right id but not the update method.