找回密码
 立即注册

QQ登录

只需一步,快速开始

bettle

注册会员

1

主题

3

帖子

35

积分

注册会员

积分
35
  • 32

    金币

  • 主题

  • 帖子

最新发帖
bettle
注册会员   /  发表于:2016-10-12 14:57  /   查看:3402  /  回复:6
C1点击一列进行排序后,再选择一定范围的单元格如何按行列遍历
我点击了C1的一列,然后选择了一定范围的单元格行,要把它的内容清除掉,结果
发现清除掉的内容不是我要清的,清除到另的了,代码如下
If Me.C1FlexGrid4.RowSel > 0 And Me.C1FlexGrid4.ColSel > 0 Then
                'If me.C1FlexGrid4.Selection.c2 - me.C1FlexGrid4.Selection.c1 + 1 > 1 Then
                '    MessageBox.Show("一次只能对一列中的选中区域进行删除,不能跨列,操作取消" & vbCrLf & "请重新操作。", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                '    Exit Sub
                'End If
                For mIntRow As Int32 = Me.C1FlexGrid4.Selection.r1 To Me.C1FlexGrid4.Selection.r2
                    If Me.C1FlexGrid4.Rows(mIntRow).AllowEditing = True Then
                        'For mIntCol As Int32 = Me.C1FlexGrid4.Selection.c1 To Me.C1FlexGrid4.Selection.c2
                        'If Me.C1FlexGrid4.Cols(mIntCol).AllowEditing = True Then
                        Dim mStock_no As String = Me.C1FlexGrid4(mIntRow, 1).ToString()
                        DBUtility.SQLite.SQLiteHelper.ExecuteNonQuery(MySqlLite_Con, "DELETE  FROM classamtin WHERE class_code = 'C._BKDL' and stock_no = '" & mStock_no & "' ; ", Nothing)
                        Me.C1FlexGrid4.SetData(mIntRow, 1, "")
                        Me.C1FlexGrid4.SetData(mIntRow, 2, "")
                        Me.C1FlexGrid4.RemoveItem(Me.C1FlexGrid4.Rows(mIntRow).Index)
                        'End If
                        'Next
                    End If
                Next
            End If


请问一下老师,这个要怎样写是不是经过排序后我的Dim mStock_no As String = Me.C1FlexGrid4(mIntRow, 1).ToString()取到的值有问题,
但是我是排序后再选择的一定cellrange的,再遍历的。

6 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2016-10-12 15:56:08
推荐
谢谢您的反馈。
排序后顺序是会发生改变。

但是如果是想清除掉选择数据,直接调用Selection.Clear方法就可以做到,不用遍历。
而且该方法不受到排序的影响。
在Clear方法的参数选择上,如果是仅仅清除掉非绑定数据,就设置为ClearFlags.Content。如果想要清除掉绑定数据,就是ClearFlags.UserData

评分

参与人数 1满意度 +5 收起 理由
bettle + 5

查看全部评分

请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
bettle
注册会员   /  发表于:2016-10-12 16:29:17
板凳
奇怪,我使用了Me.C1FlexGrid4.Selection.Clear(ClearFlags.UserData)和Me.C1FlexGrid4.Selection.Clear(ClearFlags.Content)来清除单元格数据,但是都没有反应,数据都还在,用ClearFlags.All也不行,是什么原因,需要设置其它参数吗?我是用C1FlexGrid4.DataSource = DsetObj.Tables(0)传数据给控件的
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-10-12 17:14:59
地板
bettle 发表于 2016-10-12 16:29
奇怪,我使用了Me.C1FlexGrid4.Selection.Clear(ClearFlags.UserData)和Me.C1FlexGrid4.Selection.Clear ...

Clear方法只能用于非绑定,数据绑定就不能用这个方法清除了。

数据绑定需要清除的是底层数据源。
我针对您的问题进行了测试,排序后使用Selection取到的范围值是没有问题的。
调用如下代码清除掉选择的值,也是正确的。
  1. CellRange cr = _flex.Selection;
  2.             this._flex.SetData(cr.TopRow,cr.LeftCol, "");
复制代码


推测是您排序后,选择了参与排序列的单元格,然后设置清除。
当您完成清除后,这个单元格的值会变成NULL,导致该列重新进行了排序,所以给人感觉有了跳动。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-10-12 17:15:05
5#
bettle 发表于 2016-10-12 16:29
奇怪,我使用了Me.C1FlexGrid4.Selection.Clear(ClearFlags.UserData)和Me.C1FlexGrid4.Selection.Clear ...

Clear方法只能用于非绑定,数据绑定就不能用这个方法清除了。

数据绑定需要清除的是底层数据源。
我针对您的问题进行了测试,排序后使用Selection取到的范围值是没有问题的。
调用如下代码清除掉选择的值,也是正确的。
  1. CellRange cr = _flex.Selection;
  2.             this._flex.SetData(cr.TopRow,cr.LeftCol, "");
复制代码


推测是您排序后,选择了参与排序列的单元格,然后设置清除。
当您完成清除后,这个单元格的值会变成NULL,导致该列重新进行了排序,所以给人感觉有了跳动。

评分

参与人数 1满意度 +5 收起 理由
bettle + 5 很给力!

查看全部评分

请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
bettle
注册会员   /  发表于:2016-10-12 21:40:02
6#
正解,谢谢。后面采用了这个方法               
Dim cr As CellRange = Me.C1FlexGrid4.Selection
Me.C1FlexGrid4.SetData(cr, "")
                '排序后,选择了一定范围的单元格,然后设置清除。
          ' 当完成清除后,该单元区域被清空,同时列自动重新进行了排序,确实有点跳动。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-10-13 10:50:22
7#
bettle 发表于 2016-10-12 21:40
正解,谢谢。后面采用了这个方法               
Dim cr As CellRange = Me.C1FlexGrid4.Selection
Me.C ...

非常谢谢您的反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部