Click here to Skip to main content
15,886,362 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
XML
<asp:GridView ID="grd1" runat ="server" Width="600px" Height ="600px" ShowHeader="true"
    ShowFooter="true" AutoGenerateColumns ="false" AllowPaging="true"
            onpageindexchanging="grd1_PageIndexChanging"  OnSorting="grd1_Sorting"
            onrowcreated="grd1_RowCreated" Font-Bold="True" Font-Size="Medium"
            ForeColor="Black"  AllowSorting="true"
        Font-Names="Verdna"
            >
    <Columns >
    <asp:TemplateField SortExpression="Sr.No" >
    <HeaderStyle  ForeColor="Blue" Font-Bold ="true"  />

    <HeaderTemplate  >
    Sr. No

</HeaderTemplate>

    <ItemTemplate >
    <div style="width :100%;">
    <asp:Label ID="srno" runat ="server" Text='<%# Container.DataItemIndex +1 %>' />
    </div>
    </ItemTemplate>


    </asp:TemplateField>


    <asp:TemplateField SortExpression="Roll" >
     <HeaderStyle  ForeColor="Blue" Font-Bold ="true" />
    <HeaderTemplate>
    Roll

    </HeaderTemplate>
    <EditItemTemplate>

    <asp:TextBox ID="txtrollno" runat ="server" Text='<%# Bind("Roll") %>'  />

    </EditItemTemplate>
    <ItemTemplate>

    <asp:Label  ID="lblrollno" runat ="server" Text='<%# Bind("Roll") %>'  />

    </ItemTemplate>


    </asp:TemplateField>
     <asp:TemplateField SortExpression="Name" >
     <HeaderStyle  ForeColor="Blue" Font-Bold ="true" />

    <HeaderTemplate>
   Name

    </HeaderTemplate>

     <EditItemTemplate>

    <asp:TextBox ID="txtname" runat ="server" Text='<%# Bind("name") %>'  />

    </EditItemTemplate>
    <ItemTemplate>

    <asp:Label  ID="lblname"  runat ="server" Text='<%# Bind("name") %>'  />

    </ItemTemplate>
 </asp:TemplateField>


    </Columns>
        <PagerStyle BackColor="#3366CC" ForeColor="#000099" />
        <HeaderStyle BackColor="#9966FF" />
    </asp:GridView>


code behind is

C#
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        bind();
    }
}
public void bind()
{
    da = new SqlDataAdapter("select * from stu_info", strcon);
    ds = new DataSet();
    da.Fill(ds);
    grd1.DataSource = ds.Tables[0];
    grd1.DataBind();
}

protected void grd1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    grd1.PageIndex = e.NewPageIndex;
    grd1.DataSource = ds.Tables[0];
    searchstring = txtSearch.Text;
    grd1.DataBind();
}
protected void grd1_RowCreated(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.Pager)
    {
        DropDownList ddl = new DropDownList();
        //adds variants of pager size
        ddl.Items.Add("5");
        ddl.Items.Add("10");
        ddl.AutoPostBack = true;
        //selects item due to the GridView current page size
        ListItem li = ddl.Items.FindByText(grd1.PageSize.ToString());
        if (li != null)
            ddl.SelectedIndex = ddl.Items.IndexOf(li);
        ddl.SelectedIndexChanged += new EventHandler(ddl_SelectedIndexChanged);
        //adds dropdownlist in the additional cell to the pager table
        Table pagerTable = e.Row.Cells[0].Controls[0] as Table;
        TableCell cell = new TableCell();
        cell.Style["padding-left"] = "60px";
        cell.Style.Add("forecolor", "white");
        cell.Controls.Add(new LiteralControl("Page Size:"));
        cell.ForeColor = System.Drawing.Color.White;
        cell.Controls.Add(ddl);
        pagerTable.Rows[0].Cells.Add(cell);
    }
}

void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
    //changes page size
    grd1.PageSize = int.Parse(((DropDownList)sender).SelectedValue);
    //binds data source
    grd1.DataSource = ds.Tables[0];
    grd1.DataBind();
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    grd1.PageSize = int.Parse(((DropDownList)sender).SelectedValue);
    grd1.DataSource = ds.Tables[0];
    grd1.DataBind();
}
protected string HighlightText(string searchWord, string inputText)
{
    Regex expression = new Regex(searchWord.Replace(" ", "|"), RegexOptions.IgnoreCase);

    return expression.Replace(inputText, new MatchEvaluator(ReplaceKeywords));
}
public string ReplaceKeywords(Match m)
{
    return "<span class="highlight" >" + m.Value + "</span>";
}

protected void btnSearch_Click(object sender, EventArgs e)
{
    searchstring = txtSearch.Text;
    DataTable dt = ds.Tables[0];
    DataView dv = new DataView(dt);
    String SearchExpression = null;
    if (!string.IsNullOrEmpty(txtSearch.Text))
    {
        SearchExpression = string.Format("{0}'%{1}%'", grd1.SortExpression, txtSearch.Text);
    }
    dv.RowFilter = "Name like" + SearchExpression;
   
    grd1.DataSource = dv;
    grd1.DataBind();

}
public SortDirection dir
{
    get
    {
        if (ViewState["dirstate"] == null)
        {
            ViewState["dirstate"] = SortDirection.Ascending;
        }
        return (SortDirection)ViewState["dirstate"];
    }
    set 
    {
        ViewState["dirstate"] = value;
    }
}
protected void grd1_Sorting(object sender, GridViewSortEventArgs e)
{   
    bind();
    DataTable dt = new DataTable();
    dt = ds.Tables[0];
    {
        string SortDir = string.Empty;
        if (dir == SortDirection.Ascending)
        {
            dir = SortDirection.Descending;

            SortDir = "Desc";
        }
        else
        {
            dir = SortDirection.Ascending;
            SortDir = "Asc";
        }

        DataView SortedView = new DataView(dt);
        SortedView.Sort = e.SortExpression + "" + SortDir;
        
        grd1.DataSource = SortedView;
        grd1.DataBind();
    }
}
}
Posted
v3
Comments
JoCodes 27-Jan-14 0:55am    
Is your grd1_Sorting event getting fired?

1 solution

It seems you are creating a new DataTable in Sorting Event of the Gridview.

Instead fetch it from the Datasource

DataTable dataTable = GridView1.DataSource as DataTable;


Or Can even use a Session for it ,like
DataTable dataTable = Session["datatable"] as DataTable; //Session should be set in BindMethod


Also , remove the Bind() method called in Sorting event.

Try and revert.
 
Share this answer
 
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900