村东智叟 发表于 2021-4-5 10:53:21

C1FlexGrid 设置固定列数量

您好:
我想实现这个功能,在程序运行的时候,点击列固定按钮。
可以将前面四列变成固定的列,不随滚动条滚动。后面的列随滚动条滚动。
我目前采用的方法是直接在按钮的点击事件中,将Cols.Fixed = 4来设置更改固定列的数量。
但是这样操作会导致系统直接在grid中增加了四个固定的列而不是将前面的四个列变成固定列。
请问这个如何实现。
目前采用的数据绑定的方法是SortableBindingLIst


Richard.Ma 发表于 2021-4-6 08:59:01

本帖最后由 Richard.Ma 于 2021-4-6 09:28 编辑

你需要的实际上是冻结行,在xaml或者后台代码中设置如下属性即可
FrozenColumns="3"

村东智叟 发表于 2021-4-6 09:38:40

Richard.Ma 发表于 2021-4-6 08:59
你需要的实际上是冻结行,在xaml或者后台代码中设置如下属性即可

您好,
感谢您的回复。
我没有表述清楚。
不是冻结列,是固定列。(冻结列只是列冻结了不随滚动条滚动,不是我想要实现的功能)
实际上我要固定的这些列不仅是不随滚动条滚动。而且设置在这些列上的事件也不能被使用。
背景也改变,即使是行选择模式下,也不会有光标。

Richard.Ma 发表于 2021-4-6 10:55:28

抱歉,目前无法实现在固定列中绑定数据

村东智叟 发表于 2021-4-6 11:10:06

Richard.Ma 发表于 2021-4-6 10:55
抱歉,目前无法实现在固定列中绑定数据

您好:
感谢您的回答。
那么使用冻结列的情况下,
如何让冻结列上面的事件不触发,比如单元格的编辑事件,表头的排序事件等等,所有的事件都无法触发。这个怎么实现?

村东智叟 发表于 2021-4-6 11:14:05

在行选择模式下,冻结列没有选中的背景怎么实现?

Richard.Ma 发表于 2021-4-6 11:52:16

目前确实应该通过这种思路来实现,我验证后给你回复

村东智叟 发表于 2021-4-8 10:06:21

Richard.Ma 发表于 2021-4-6 11:52
目前确实应该通过这种思路来实现,我验证后给你回复

您好,
以防万一,目前的进度共享给您。
目前提出的需求,按照您这边的方案就本上都实现了。
但是在行选择模式下,选中行的冻结列没有背景色目前无法实现。
还有,如果冻结列上有双击事件,这一行也有双击事件。在冻结行列的情况下,双击该列的单元格设置为不触发列上的事件,改行的行事件也无法触发了。。。

村东智叟 发表于 2021-4-8 10:17:22

村东智叟 发表于 2021-4-8 10:06
您好,
以防万一,目前的进度共享给您。
目前提出的需求,按照您这边的方案就本上都实现了。


大概是这种需求

Richard.Ma 发表于 2021-4-8 11:14:30

你说的冻结列再选中行的情况下仍然保存本来的样式,可以通过在OwnerDrawCell事件中加如下代码实现,需要注意的是需要将DrawMode属性设置为onwerdraw
            if (e.Col < 3)
            {
                e.Style = c1FlexGrid2.Styles.Frozen;
            }

另外为了让冻结列和固定列样式一致,可以直接将冻结列的样式进行设置,通过设计器或者代码都行,代码的话就是1FlexGrid2.Styles.Frozen的具体样式属性设置

你提到的冻结列上有双击事件,这一行也有双击事件,这个我不太明白,一般来说是通过
c1FlexGrid2.DoubleClick += C1FlexGrid2_DoubleClick;
这个事件来处理,在其中判断点击的是哪个单元格,如下代码即可实现,只有点击后面非冻结列时,才执行代码
      private void C1FlexGrid2_DoubleClick(object sender, EventArgs e)
      {
            if (c1FlexGrid2.HitTest().Column > 2)
            {
                MessageBox.Show("执行方法");
            }
      }


页: [1] 2
查看完整版本: C1FlexGrid 设置固定列数量