标题:关于子表的DynamicBackColor斑马色隔行显示,记录号分隔不太好用,各位有什 ...
取消只看楼主
shonken
Rank: 2
等 级:论坛游民
帖 子:95
专家分:21
注 册:2017-1-15
结帖率:86.67%
已结贴  问题点数:20 回复次数:6 
关于子表的DynamicBackColor斑马色隔行显示,记录号分隔不太好用,各位有什么好办法
数据是通过CA读取SQL,子表与父表关联索引后,用MOD(RECNO(),2)作为DynamicBackColor条件达不到斑马色隔行的效果,见下图,各位有什么办法吗?

搜索更多相关主题的帖子: 记录 显示 条件 办法 子表 
2023-04-27 11:04
shonken
Rank: 2
等 级:论坛游民
帖 子:95
专家分:21
注 册:2017-1-15
得分:0 
以下是引用吹水佬在2023-4-27 11:22:59的发言:

有索引文件的顺序与RECNO()无关,只浏览可建临时表


临时表斑马色没问题
2023-04-28 16:10
shonken
Rank: 2
等 级:论坛游民
帖 子:95
专家分:21
注 册:2017-1-15
得分:0 
以下是引用laowan001在2023-4-27 15:57:58的发言:

子表增加一个标识字段,按索引顺序赋值,内容是类似recn()的顺序号,这样也许行


CA,远程表,不用临时增加列了
2023-04-28 16:10
shonken
Rank: 2
等 级:论坛游民
帖 子:95
专家分:21
注 册:2017-1-15
得分:0 
以下是引用东海ECS在2023-4-28 19:04:47的发言:

使用 DynamicBackColor 属性实现斑马色隔行的方法在子表中通常是通过给记录号分配颜色来实现,但这种方法的确存在一些限制。

如果记录号分隔不好用,可以尝试使用 DataGridView 的 AlternatingRowsDefaultCellStyle 属性来实现斑马色隔行效果,具体操作如下:

打开子表的属性窗口,选择“DataGridView”节点,找到“DefaultCellStyle”属性,展开后可以看到“AlternatingRowsDefaultCellStyle”属性。
点击“AlternatingRowsDefaultCellStyle”的“...”按钮,进入编辑窗口。
在编辑窗口中设置颜色,比如“BackColor”设置为“LightGray”。
点击确定,保存设置。
这样,就可以在子表中实现斑马色隔行效果,且不需要额外的记录号列。如果需要给特定行设置不同的背景色,可以使用 DataGridView 的“CellFormatting”事件来实现。


用AI作答?
2023-04-28 22:39
shonken
Rank: 2
等 级:论坛游民
帖 子:95
专家分:21
注 册:2017-1-15
得分:0 
以下是引用csyx在2023-4-29 12:37:20的发言:


如果 ActiveRow 能具有确定性,我不会说勉强可接受


我用过ActiveRow ,要GRID取得焦点才会生效,而且只是当前显示的内容才斑马色,滚动后的数据也没效果
2023-04-29 14:40
shonken
Rank: 2
等 级:论坛游民
帖 子:95
专家分:21
注 册:2017-1-15
得分:0 
以下是引用吹水佬在2023-4-29 15:54:16的发言:



有个问题:grid失焦时ActiveRow为0,导致不管当前在那一行MOD(this.ActiveRow,2)都为0。
简单测试了一下,其他好像还可以接受。




DECLARE LONG PostMessage IN User32 LONG, LONG, LONG, LONG

CREATE CURSOR tt (F1 I, F2 C(10))
FOR i = 1 TO 100
    INSERT INTO tt VALUES (i%2, PADL(i,4,"0"))
ENDFOR
GO TOP

of = CREATEOBJECT("form1")
of.show(1)
RETURN

DEFINE CLASS form1 As Form
    AllowOutput = 0
    AutoCenter  = 1
    ADD OBJECT cmd1  as commandbutton WITH top=4,left=10,height=22,caption="SORT"
    ADD OBJECT text1 as textbox       WITH top=4,left=120
    ADD OBJECT grid1 as myGrid        WITH top=30
   
    PROCEDURE Init
        BINDEVENT(this.hWnd, 0x401, this, "myGridSetFocus")
        PostMessage(thisform.hWnd, 0x401, 0, 0)
    ENDPROC
     
    PROCEDURE cmd1.Click
        IF DESCENDING()
            INDEX on F2 TAG tt_F2 ASCENDING
        ELSE
            INDEX on F2 TAG tt_F2 DESCENDING
        ENDIF
        thisform.Grid1.SetFocus
    ENDPROC
   
    FUNCTION myGridSetFocus(hWnd, nMsg, wParam, lParam)
        this.Grid1.SetFocus
    ENDPROC   
ENDDEFINE

DEFINE CLASS myGrid as Grid
    PROCEDURE init
        this.SetAll("DynamicBackColor", "IIF(MOD(this.ActiveRow,2)==0,0xF0F0F0,0xC0C0C0)", "Column")
    ENDPROC

    PROCEDURE Scrolled(nDirection)
        DODEFAULT()
        PostMessage(thisform.hWnd, 0x401, 0, 0)
    ENDPROC
ENDDEFINE


效果不错
有个问题,如果当前容器对象里有多个GRID呢?
2023-04-29 18:25
shonken
Rank: 2
等 级:论坛游民
帖 子:95
专家分:21
注 册:2017-1-15
得分:0 
一个容器里有多个GRID的大概思路是这样:

在Gird中新建一个x_GotFocus方法,绑定Controls(2)的GotFocus事件,用来传递当前GRID的名字
  Bindevent(LoColobj.Controls(2),"GotFocus",This,"x_GotFocus")

符合GRID名字的再获得焦点

[此贴子已经被作者于2023-4-29 19:03编辑过]

2023-04-29 18:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-512055-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.132170 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved