您好,欢迎来到锐游网。
搜索
您的当前位置:首页Winform dataGridView 多列排序问题 (不重新访问数据库)

Winform dataGridView 多列排序问题 (不重新访问数据库)

来源:锐游网

//客户要求 做一个跟Excel 多列排序   排序操作可能会频繁  

//注意:我这里设置的0,要排序的字段不能放在dataGridView第一列,可以把自增列作为第一列或者随便添一个隐藏掉

//这里只设置了3列,
        private bool[] sort = { true, true, true };
        private int[] sorts = { 0, 0, 0 };
        private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            int px = this.dataGridView1.SortedColumn.Index;
            if (sorts[0] == px && sort[0])
            {
                sort[0] = false;
            }
            else if (sorts[0] == px && !sort[0])
            {
                sort[0] = true;
            }
            if (sorts[1] == px && sort[1])
            {
                sort[1] = false;
            }
            else if (sorts[1] == px && !sort[1])
            {
                sort[1] = true;
            }
            if (sorts[2] == px && sort[2])
            {
                sort[2] = false;
            }
            else if (sorts[2] == px && !sort[2])
            {
                sort[2] = true;
            }


            if (sorts[0] != 0 && sorts[1] != 0 && sorts[2] != 0)
            {
                if (sorts[0] != px && sorts[1] != px && sorts[2] != px)
                {
                    string name = dataGridView1.Columns[sorts[0]].HeaderText.Replace("🔺", "").Replace("🔻", "");
                    dataGridView1.Columns[sorts[0]].HeaderText = name;
                    sorts[0] = sorts[1];
                    sort[0] = sort[1];
                    sorts[1] = sorts[2];
                    sort[1] = sort[2];
                    sorts[2] = px;
                    sort[2] = false;
                }
            }

            if (sorts[0] == 0)
            {
                sorts[0] = px;
                sort[0] = false;
            }
            else if (sorts[1] == 0 && px != sorts[0])
            {
                sorts[1] = px;
                sort[1] = false;
            }
            else if (sorts[2] == 0 && px != sorts[0] && px != sorts[1])
            {
                sorts[2] = px;
                sort[2] = false;
            }
            string orderby = "";
            for (int i = 0; i < sorts.Length; i++)
            {
                string name = dataGridView1.Columns[sorts[i]].HeaderText.Replace("🔺", "").Replace("🔻", "");
                if (sorts[i] > 0)
                {
                    if (!sort[i])
                    {
                        orderby += dataGridView1.Columns[sorts[i]].DataPropertyName + " ASC,";

                        //这里尝试用dataGridView本身去进行排序  要排序的表头箭头是有的  但是排序后是不正确的  排序应该是最后一个点的列排序的结果
                        //dataGridView1.Columns[sorts[i]].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Ascending;

                        //找不到只设置表头排序箭头方向的方法   只好自己搞一个
                        dataGridView1.Columns[sorts[i]].HeaderText = "🔺" + name;
                    }
                    else
                    {
                        orderby += dataGridView1.Columns[sorts[i]].DataPropertyName + " DESC,";
                        //dataGridView1.Columns[sorts[i]].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Descending;
                        dataGridView1.Columns[sorts[i]].HeaderText = "🔻" + name;
                    }
                }
            }
            dataTable1.DefaultView.Sort = orderby.TrimEnd(',');
            dataTable1 = dataTable1.DefaultView.ToTable();
            dataGridView1.DataSource = dataTable1;
        }

结果如图:

 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- ryyc.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务