请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

清越流年

银牌会员

4

主题

12

帖子

2694

积分

银牌会员

积分
2694

活字格认证

最新发帖

[已处理] TRueDBGrid排序

清越流年
银牌会员   /  发表于:2014-12-19 15:47  /   查看:10409  /  回复:16
TRueDBGrid的DataSource重复绑定数据集,
第一次执行DataSource绑定后,点击第二列的列头进行排序。
当再次执行DataSource绑定后,grid显示的是默认第一列的排序。但是第二列还是有△符号表示。

问题:如何在多次的绑定中一直保持当前选择的列排序。

16 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2014-12-19 18:59:00
沙发
回复 1楼清越流年的帖子

您好,
可以通过 this.c1TrueDBGrid1.AllowSort = false; 先使TrueDBGrid 重置排序状态。
在重新进行数据绑定。
回复 使用道具 举报
清越流年
银牌会员   /  发表于:2014-12-22 10:42:00
板凳
回复 2楼iceman的帖子

private void Form1_Load(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("A1",typeof(string));
            dt.Columns.Add("B1", typeof(string));
            dt.Columns.Add("C1", typeof(string));
            for (int i = 0; i < 5; i++)
            {
                DataRow DR = dt.NewRow();
                DR["A1"] = i + 1;
                DR["B1"] = i + 2;
                DR["C1"] = i + 1;
                dt.Rows.Add(DR);
            }
            dgView.DataSource = dt;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            foreach (C1.Win.C1TrueDBGrid.C1DisplayColumn col in this.dgView.Splits[0].DisplayColumns)
            {
                if (col.DataColumn.SortDirection != C1.Win.C1TrueDBGrid.SortDirEnum.None)
                {
                    ColName = col.DataColumn.DataField;
                    key = col.DataColumn.SortDirection;
                    break;
                }
            }
            DataTable dt = new DataTable();
            dt.Columns.Add("A1", typeof(string));
            dt.Columns.Add("B1", typeof(string));
            dt.Columns.Add("C1", typeof(string));
            for (int i = 0; i < 5; i++)
            {
                DataRow DR = dt.NewRow();
                DR["A1"] = i + 1;
                DR["B1"] = i + 2;
                DR["C1"] = i + 1;
                dt.Rows.Add(DR);
            }
         
            dgView.AllowSort = false;
            dgView.SetDataBinding(dt, "", false);
            //dgView.DataSource = dt;
           // dgView.AllowSort = true;
            foreach (C1.Win.C1TrueDBGrid.C1DisplayColumn col in this.dgView.Splits[0].DisplayColumns)
            {
                if (col.DataColumn.DataField == ColName)
                {
                    col.DataColumn.SortDirection = key;
                    break;
                }
            }
            //this.dgView.Splits[0].DisplayColumns["" + ColName + ""].DataColumn.SortDirection = key;
           // dgView.AllowSort = true;
        }


就这一段普通的赋值就实现不了,按你的方法试了,没有效果,麻烦帮忙看下
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-12-22 18:47:00
地板
回复 3楼清越流年的帖子

问题我们已经查收,调试后给您结果。谢谢
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-12-23 10:21:00
5#
回复 3楼清越流年的帖子

你的代码已经查验。
在设置了C1TrueDBGrid.AllowSort=false。在第二列的△符号不会出现。
还是说我们对你的问题理解有误?
我看你提到普通的赋值无法实现,请问哪一段赋值操作没有实现?
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
清越流年
银牌会员   /  发表于:2014-12-23 13:34:00
6#
回复 5楼Alice的帖子

1。首先按摩一列进行排序,然后在给grid重新绑值,绑完值后的grid数据还是按照开始的排序那列进行排序,裂伤也要有图标
2。现在遇到的问题是,绑定玩数据后,猎头的符号有,但是grid数据没有排列
3。有什么解决方案能解决grid数据集再绑定后,数据还是按照开始时排序的列进行排序
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-12-23 18:21:00
7#
回复 6楼清越流年的帖子

很抱歉我们最初对你问题的理解有误。

在重新数据绑定之后,原来的数据以及排序信息相关都会被清除,然后使用新数据源里的数据。
如果你需要保存原先的排序,需要自己写代码逻辑记录原来的排序信息,然后在新的绑定里,重新排序。

我看你的代码里设置了列的SortDirection,这个必须在AllowSort=true的时候才会起作用。

为了实现你的需求,将你的代码更改如下:
  1. string ColName;
  2.         private void button1_Click(object sender, EventArgs e)
  3.         {
  4.             foreach (C1.Win.C1TrueDBGrid.C1DisplayColumn col in this.c1TrueDBGrid1.Splits[0].DisplayColumns)
  5.             {
  6.                 if (col.DataColumn.SortDirection != C1.Win.C1TrueDBGrid.SortDirEnum.None)
  7.                 {
  8.                     ColName = col.DataColumn.DataField;
  9.                     break;
  10.                 }
  11.             }         

  12.             this.c1TrueDBGrid1.DataSource = dt;
  13.             this.c1TrueDBGrid1.AllowSort = true;
  14.             foreach (C1.Win.C1TrueDBGrid.C1DisplayColumn col in this.c1TrueDBGrid1.Splits[0].DisplayColumns)
  15.             {
  16.                 if (col.DataColumn.DataField == ColName)
  17.                 {
  18.                     col.DataColumn.SortDirection = SortDirEnum.None;
  19.                     break;
  20.                 }
  21.             }         
  22.         }
复制代码
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
清越流年
银牌会员   /  发表于:2014-12-24 11:24:00
8#
col.DataColumn.SortDirection = SortDirEnum.None; 这句代码写了不就是把排序的规则有置空了么,后面那段重新排序的代码怎么实现
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-12-24 15:38:00
9#
回复 8楼清越流年的帖子

7楼代码演示的就是记住被排序的列,重新绑定,保持排序,最后将排序的列的三角符号去掉。

SortDirection被设置为非None,不会参与排序动作,仅仅是显示三角符号,这个显示在AllowSort为true的时候起作用。

在绑定数据后,在运行时,鼠标单击列头可以进行排序,还会有三角符号显示排序状态。
重新更改数据源,保持排序,然后通过None让三角符号不显示。

我写的这段代码,你可以先测试下,就能够理解是什么意思了。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
清越流年
银牌会员   /  发表于:2014-12-24 17:05:00
10#
代码已经运行过几次,但是重新更改数据源后,三角符号是不显示了,但是GRid的数据显示方式没有和更改数据源前的显示方式一致
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部