Solved

ASP.Net/C# - Sorting GridView code working how do I keep checkboxes checked?

Posted on 2009-03-31
3
1,943 Views
Last Modified: 2012-05-06
Hello all I have all my gridviews sorting perfectly, however what happens is when I click on the sorting I lose all my checked checkboxes in my grid.  Any idea how I can keep them checked?  Here is what I have below as an example:


protected void EDIAccountData_Sorting(object sender, GridViewSortEventArgs e)

        {

            DataSet dsAccountData = (DataSet)Session["dsAccountData"];

            DataTable dtAccountData = dsAccountData.Tables[0];
 

            if (dtAccountData != null)

            {

                DataView dataView = new DataView(dtAccountData);

                dataView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
 

                EDIAccountData.DataSource = dataView;

                EDIAccountData.DataBind();

            }

        }
 

 private string GetSortDirection(string column)

        {
 

            // By default, set the sort direction to ascending.

            string sortDirection = "ASC";
 

            // Retrieve the last column that was sorted.

            string sortExpression = Session["SortExpression"] as string;
 

            if (sortExpression != null)

            {

                // Check if the same column is being sorted.

                // Otherwise, the default value can be returned.

                if (sortExpression == column)

                {

                    string lastDirection = Session["SortDirection"] as string;

                    if ((lastDirection != null) && (lastDirection == "ASC"))

                    {

                        sortDirection = "DESC";

                    }

                }

            }
 

            // Save new values in ViewState.

            Session["SortDirection"] = sortDirection;

            Session["SortExpression"] = column;
 

            return sortDirection;

        }
 

ASPX PAGE:

 <asp:GridView ID="EDIAccountData" Width="650px" runat="server" CellPadding="4"

                ForeColor="#333333" Font-Size="Small" GridLines="None" AllowSorting="true" AllowPaging="false"  

                OnSorting="EDIAccountData_Sorting" AutoGenerateColumns="False" DataKeyNames="CUS_Parent">

                <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />

                <RowStyle BackColor="#76B0F0" ForeColor="#333333" />

                <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />

                <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />

                <HeaderStyle VerticalAlign="Bottom" HorizontalAlign="Left" BackColor="#3D6592" Font-Bold="True" ForeColor="White" />

                <AlternatingRowStyle BackColor="White" />

                <Columns>

                    <asp:TemplateField>

                        <ItemTemplate>

                            <asp:CheckBox runat="server" ID="AcctCheckBox" AutoPostBack="true" OnCheckedChanged="AcctCheckBox_CheckedChanged" />

                        </ItemTemplate>

                    </asp:TemplateField>

                    <asp:BoundField DataField="CUS_Parent" HeaderStyle-Width="125px" ItemStyle-Width="125px" HeaderText="Parent Account" SortExpression="CUS_Parent" />

                    <asp:BoundField DataField="Parent_Name" HeaderStyle-Width="250px" ItemStyle-Width="250px" HeaderText="Customer Name" SortExpression="Parent_Name" />

                    <asp:BoundField DataField="Billrun" HeaderStyle-Width="75px" ItemStyle-Width="75px" HeaderText="Billrun" SortExpression="Billrun" />

                    <asp:BoundField DataField="folder" HeaderStyle-Width="100px" ItemStyle-Width="100px" HeaderText="Vendor" SortExpression="folder" />

                    <asp:BoundField DataField="Map_Version" HeaderStyle-Width="100px" ItemStyle-Width="100px" HeaderText="Map Version" SortExpression="Map_Version" />

                </Columns>

            </asp:GridView>

Open in new window

0
Comment
Question by:sbornstein2
  • 2
3 Comments
 
LVL 3

Accepted Solution

by:
JenniQ earned 500 total points
Comment Utility
What you need to do is subscribe to a GridView event. Create a delegate event handler that will look at all the checked fields and then assign their "checked" value to... well... "checked"  =P

GridView Events

Sorting:: Occurs when the hyperlink to sort a column is clicked, but before the GridView control handles the sort operation

RowCreated: Occurs when a row is created in a GridView control.

RowDataBound: Occurs when a data row is bound to data in a GridView control.

Here are three options that might work for ya.

And here is the code sample that you could edit to fufill you every desire:

Occurs when a data row is bound to data in a GridView control (of course you'll have to edit it to look at the isChecked property and do the assignment)

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

  protected void TaskGridView_Sorting(object sender, GridViewSortEventArgs e)
  {

    //Retrieve the table from the session object.
    DataTable dt = Session["TaskTable"] as DataTable;

    if (dt != null)
    {

      //Sort the data.
      dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
      TaskGridView.DataSource = Session["TaskTable"];
      TaskGridView.DataBind();
    }

  }

  private string GetSortDirection(string column)
  {

    // By default, set the sort direction to ascending.
    string sortDirection = "ASC";

    // Retrieve the last column that was sorted.
    string sortExpression = ViewState["SortExpression"] as string;

    if (sortExpression != null)
    {
      // Check if the same column is being sorted.
      // Otherwise, the default value can be returned.
      if (sortExpression == column)
      {
        string lastDirection = ViewState["SortDirection"] as string;
        if ((lastDirection != null) && (lastDirection == "ASC"))
        {
          sortDirection = "DESC";
        }
      }
    }

    // Save new values in ViewState.
    ViewState["SortDirection"] = sortDirection;
    ViewState["SortExpression"] = column;

    return sortDirection;
  }

  protected void Page_Load(object sender, EventArgs e)
  {

    if (!Page.IsPostBack)
    {

      // Create a new table.
      DataTable taskTable = new DataTable("TaskList");

      // Create the columns.
      taskTable.Columns.Add("Id", typeof(int));
      taskTable.Columns.Add("Description", typeof(string));

      //Add data to the new table.
      for (int i = 0; i < 10; i++)
      {
        DataRow tableRow = taskTable.NewRow();
        tableRow["Id"] = i;
        tableRow["Description"] = "Task " + (10 - i).ToString();
        taskTable.Rows.Add(tableRow);
      }

      //Persist the table in the Session object.
      Session["TaskTable"] = taskTable;

      //Bind the GridView control to the data source.
      TaskGridView.DataSource = Session["TaskTable"];
      TaskGridView.DataBind();

    }

  }

</script>

<html >
<head runat="server">
    <title>Sorting example</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

      <asp:GridView ID="TaskGridView" runat="server"
        AllowSorting="true"
        OnSorting="TaskGridView_Sorting" >
      </asp:GridView>

    </div>
    </form>
</body>
</html>


Hope this helps!!

-- jq
0
 

Author Closing Comment

by:sbornstein2
Comment Utility
thanks so much for the great response and example.
0
 
LVL 3

Expert Comment

by:JenniQ
Comment Utility
I'm glad I could have been of service! Good luck in the future.

-- jq
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

We all know that functional code is the leg that any good program stands on when it comes right down to it, however, if your program lacks a good user interface your product may not have the appeal needed to keep your customers happy. This issue can…
Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now