Link to home
Start Free TrialLog in
Avatar of justin_smith
justin_smithFlag for Australia

asked on

GridView Sorting

Hi,

I am using SqlDataSource to bind data to Gridview....

i am forced to determined the query only dynamically..

so it is all done programatically...

I am having in issue with implementing a handler for sorting..

Can someone help me with a handler that works with SqlDataSource as the DataSource for GridView....

Also how can we get a DataTable from SqlDataSource
Avatar of Jai S
Jai S
Flag of India image

below is a code that i use for sorting...let me know if you need further help

DataTable dtViewData = new DataTable();
 
//this is the Sorting event of the grid view(data grid)...bind this even to you data grid...
    protected void grdView_Sorting(Object sender, GridViewSortEventArgs e)
    {
 
//this procedure call is to load you data grid ...like setting the data source etc...the code is also given below
        SearchControls();
 
        DataView dvSort = new DataView();
        dvSort = dtViewData.DefaultView;
//dtViewData is your data table - which in this case is loaded in teh function SearchControls
        string str = Convert.ToString(e.SortDirection);
        e.SortDirection = SortDirection.Ascending;
 
        ViewState.Add("SortCol", Convert.ToString(e.SortExpression));
 
        if (ViewState[e.SortExpression] != null)
        {
            if (Convert.ToString(ViewState[e.SortExpression]) == "Ascending")
            {
                e.SortDirection = SortDirection.Descending;
                ViewState[e.SortExpression] = "Desending";
                dvSort.Sort = e.SortExpression + " DESC";
            }
            else
            {
                e.SortDirection = SortDirection.Ascending;
                ViewState[e.SortExpression] = "Ascending";
                dvSort.Sort = e.SortExpression + " ASC";
            }
        }
        else
        { ViewState.Add(Convert.ToString(e.SortExpression), "Ascending"); dvSort.Sort = e.SortExpression + " ASC"; }
 
        grdView.DataSource = dvSort;
        grdView.DataBind();
 
 
    }
private void SearchControls(string sort)
{
        dtViewData = new DataTable();
 
        ssql = "your dynamic sql code goes here...";
        dtViewData = objDb.GetDataTable(CommandType.Text, ssql);
 
}

Open in new window

Avatar of justin_smith

ASKER

I will have to implement this way if nothing works..(cos i have to rewrite what i have do so far)
 but...

I am with you in use of DataView.

please let me know if this can be done..

1)Can i get DataView / DataTable object from GridView.DataSource
2)I am pretty sure this could be easily done if i initially used DataTable instead of SqlDataSource object



i think you can...

use it this way....

DataTable dt = (DataTable)YourGridViewName.DataSource;

Open in new window

this is what i get

Unable to cast object of type 'System.Web.UI.WebControls.SqlDataSource' to type 'System.Data.DataTable'.
Since you are assigning a SqlDataSource you probably might not be able to cast it directly...here is a link that might be helpful
http://www.developersdex.com/asp/message.asp?p=1116&r=6178158

if you can share your code i will look at it...
ASKER CERTIFIED SOLUTION
Avatar of justin_smith
justin_smith
Flag of Australia image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
i am also using dynamic loading of a gridview wherein my query changes for each screen and my internal datagrid loading dynamically...i managed to achieve the loading time (15 records per view) in less than  a second for tables with more than a 100 thousand records....