我想在一个form里添加几排序按钮对DataGridView或DataTable进行排序,
datagridview默认的排序方式是以升序,想点击按钮时是以降序排列,而且还可以取消排序状态,如何设置?

解决方案 »

  1.   

    在不同的按钮事件中,分别对绑定的数据源,使用不同排序方法的’SQL‘语句即可。
      

  2.   

    排序可以调用 DataGridView 的排序函数void
    Sort (
    DataGridViewColumn dataGridViewColumn,
    ListSortDirection direction
    )来进行对于取消排序, 可以使用 BindingSource 来作为媒介,
    BindingSource 有个 RemoveSort 调用.
      

  3.   

    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ViewState["SortOrder"] = "身份证号码";
                ViewState["OrderDire"] = "ASC";
                bind();
            }
        }
        protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
        {
            string sPage = e.SortExpression;
            if (ViewState["SortOrder"].ToString() == sPage)
            {
                if (ViewState["OrderDire"].ToString() == "Desc")
                    ViewState["OrderDire"] = "ASC";
                else
                    ViewState["OrderDire"] = "Desc";
            }
            else
            {
                ViewState["SortOrder"] = e.SortExpression;
            }
            bind();
        }    public void bind()
        {
            
            string sqlstr = "select top 5 * from 飞狐工作室";
            sqlcon = new SqlConnection(strCon);
            SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);
            DataSet myds = new DataSet();
            sqlcon.Open();
            myda.Fill(myds, "飞狐工作室");
            DataView view = myds.Tables["飞狐工作室"].DefaultView;
            string sort = (string)ViewState["SortOrder"] + " " + (string)ViewState["OrderDire"];
            view.Sort = sort;
            GridView1.DataSource = view;
            GridView1.DataBind();
            sqlcon.Close();
        }
    }前台主要代码:
    <asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False"
                            CellPadding="3" Font-Size="9pt" OnSorting="GridView1_Sorting" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px">
                            <FooterStyle BackColor="White" ForeColor="#000066" />
                            <Columns>
                                 <asp:BoundField DataField="身份证号码" HeaderText="用户ID" SortExpression="身份证号码" />
                                <asp:BoundField DataField="姓名" HeaderText="用户姓名" SortExpression="姓名"/>
                                <asp:BoundField DataField="员工性别" HeaderText="性别" SortExpression="员工性别"/>
                                <asp:BoundField DataField="家庭住址" HeaderText="家庭住址" SortExpression="家庭住址"/>
                                    
                            </Columns>
                            <RowStyle ForeColor="#000066" />
                            <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
                            <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
                            <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
                        </asp:GridView>
    该文章转载自德仔工作室:http://www.dezai.cn/Article_Show.asp?ArticleID=15602&ArticlePage=2
      

  4.   

    非常同意楼上两位
    点击升序排序按钮的时候在SQL语句加上 where  order by 字段 des
    点击降序排序按钮的时候在SQL语句加上 where  order by 字段 asc
    点击取消按钮的时候,去掉where后的条件语句
      

  5.   

    单击列排序
    http://www.cnblogs.com/h2appy/archive/2008/12/10/1348602.html
      

  6.   

    建议您使用DataView(数据视图)对象,此对象能对DataSet里的数据进行排序。它有两个很有用的方法:Sort()排序方法和RowsFilter(筛选)属性.您可以写一个方法,此方法的返回类型是DataView类型的。方法代码部分示例:
    //创建DataView对象
    DataView 对象名=new DataView();
    //指定排序方式
    对象名.Sort()=“列名 DESC/ASC”;
      

  7.   

     /// <summary>
        /// 在单击某个用于对列进行排序的超链接时发生,但在 GridView 控件执行排序操作之前。此事件通常用于取消排序操作或执行自定义的排序例程。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
        {
            string sPage = e.SortExpression;
            if (ViewState["SortOrder"].ToString() == sPage)
            {
                if (ViewState["OrderDire"].ToString() == "DESC")
                    ViewState["OrderDire"] = "ASC";
                else
                    ViewState["OrderDire"] = "DESC";
            }
            else
            {
                ViewState["SortOrder"] = e.SortExpression;
            }
            bind();
        }
      

  8.   

    dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Descending);
      

  9.   

    region//自定义编程排序方式
                if (e.Button == MouseButtons.Left && this.Columns[e.ColumnIndex].SortMode == DataGridViewColumnSortMode.Programmatic)
                {
                    // 检查已经排序的列
                    DataGridViewColumn newColumn = this.Columns[e.ColumnIndex];
                    DataGridViewColumn oldColumn = this.SortedColumn;
                    ListSortDirection direction;                // 判断排序方式
                    if (oldColumn != null)
                    {
                        if (oldColumn == newColumn &&
                            this.SortOrder == SortOrder.Ascending)
                        {
                            direction = ListSortDirection.Descending;
                        }
                        else
                        {
                            direction = ListSortDirection.Ascending;
                            oldColumn.HeaderCell.SortGlyphDirection = SortOrder.None;
                        }
                    }
                    else
                    {
                        direction = ListSortDirection.Ascending;
                    }                // 排序
                    if (newColumn != null)
                    {
                        SortedList<string, DataGridViewCellStyle> st1 = new SortedList<string, DataGridViewCellStyle>();
                        SortedList<string, int> rowheight = new SortedList<string, int>();
                        SortedList<string, bool> rowSelected = new SortedList<string, bool>();
                        foreach (DataGridViewRow row in this.Rows)
                        {
                            string guid = null;
                            foreach (DataGridViewColumn col in this.Columns)
                            {
                                guid += row.Cells[col.Name].Value.ToString();
                            }
                            st1.Add(guid, row.DefaultCellStyle.Clone());
                            rowheight.Add(guid, row.Height);
                            rowSelected.Add(guid, row.Selected);
                        }                    this.Sort(newColumn, direction);
                        //图标
     newColumn.HeaderCell.SortGlyphDirection =direction == ListSortDirection.Ascending ?
                            SortOrder.Ascending : SortOrder.Descending;
                        //重新绑定外观
                        //this.DefaultCellStyle = st0;
                        foreach (DataGridViewRow row in this.Rows)
                        {
                            string guid = null;
                            foreach (DataGridViewColumn col in this.Columns)
                            {
                                guid += row.Cells[col.Name].Value.ToString();
                            }row.DefaultCellStyle = st1[guid];
                            row.Height = rowheight[guid];