Foxtable(狐表)用户栏目专家坐堂 → [求助]用内部函数更改表的样式


  共有6100人关注过本帖树形打印复制链接

主题:[求助]用内部函数更改表的样式

帅哥哟,离线,有人找我吗?
2425004926
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:712 积分:5559 威望:0 精华:0 注册:2019/11/14 9:36:00
[求助]用内部函数更改表的样式  发帖心情 Post By:2022/8/15 21:41:00 [只看该作者]

老师指点一下
====================================================
表的样式更换,为何不能执行?是不是不能这样表达
内部函数:TableTheme
Dim t As Table = Args(0)
'样式设置1--------------------------------------------------------------------
Dim cs1 As C1.Win.C1FlexGrid.CellStyle = t.Grid.Styles.Add("样式1")
cs1.forecolor = Color.red '表头字体颜色
cs1.backcolor = Color.yellow '表头背景颜色
cs1.Border.Width = 1 '表头轮廓宽度
cs1.Border.Color = Color.Silver '表头轮廓颜色
cs1.Border.Direction = 3 '这个数值没有影响
t.DataTable.SysStyles("Normal").BorderColor = Color.Silver '网格线

'样式设置2--------------------------------------------------------------------
Dim cs2 As C1.Win.C1FlexGrid.CellStyle = t.Grid.Styles.Add("样式1")
cs2.forecolor = Color.red '表头字体颜色
cs2.backcolor = Color.Pink '表头背景颜色
cs2.Border.Width = 1 '表头轮廓宽度
cs2.Border.Color = Color.Silver '表头轮廓颜色
cs2.Border.Direction = 3 '这个数值没有影响
t.DataTable.SysStyles("Normal").BorderColor = Color.Silver '网格线

'表头颜色---------------------------------------------------------------------
For i As Integer = 0 To t.HeaderRows - 1 '表头行数
    For j As Integer = 0 To t.cols.count '所有列,0为行号列,不含行号列就由1开始
        t.Grid.SetCellStyle(i, j, Args(1))
    Next
Next

按钮代码:
Functions.Execute("TableTheme", Tables(e.Form.name & "_table1"),"cs1") ‘不能执行
Functions.Execute("TableTheme", Tables(e.Form.name & "_table1"),cs1) ‘显示未命名cs1

====================================================
如果单独表示没有问题
内部函数:TableTheme
Dim t As Table = Args(0)
'样式设置1--------------------------------------------------------------------
Dim cs1 As C1.Win.C1FlexGrid.CellStyle = t.Grid.Styles.Add("样式1")
cs1.forecolor = Color.red '表头字体颜色
cs1.backcolor = Color.yellow '表头背景颜色
cs1.Border.Width = 1 '表头轮廓宽度
cs1.Border.Color = Color.Silver '表头轮廓颜色
cs1.Border.Direction = 3 '这个数值没有影响
t.DataTable.SysStyles("Normal").BorderColor = Color.Silver '网格线

'表头颜色---------------------------------------------------------------------
For i As Integer = 0 To t.HeaderRows - 1 '表头行数
    For j As Integer = 0 To t.cols.count '所有列,0为行号列,不含行号列就由1开始
        t.Grid.SetCellStyle(i, j, cs1)
    Next
Next
按钮代码:
Functions.Execute("TableTheme", Tables(e.Form.name & "_table1")) ‘OK

====================================================
另外再问一下,Direction = 3 '这个是什么意思,为何更改数值没有影响

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110528 积分:562524 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/15 21:58:00 [只看该作者]

Direction应该是设置单元格边框,不同数字应该指不同的位置,比如左边框,右边框。

没看懂第一个函数想干什么?2个样式分别用到哪里?

另外建议按照帮助使用,底层的用法不保证一直可用:
SetHeaderRowHeight设置标题行高度。
SetHeaderCellForeColor设置指定列的标题的字体颜色。
SetHeaderCellBackColor设置指定列的标题的背景颜色。
SetHeaderCellFont设置指定列的标题的字体。


 回到顶部
帅哥哟,离线,有人找我吗?
2425004926
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:712 积分:5559 威望:0 精华:0 注册:2019/11/14 9:36:00
  发帖心情 Post By:2022/8/15 22:06:00 [只看该作者]

第一个函数:我把表的两个样式放在了一个内部函数里,函数名TableTheme,用按钮来更改样式,想着把代码写在一个函数里,没有测试成功
按钮代码1:
Functions.Execute("TableTheme", Tables(e.Form.name & "_table1"),"cs1") ‘不能执行
Functions.Execute("TableTheme", Tables(e.Form.name & "_table1"),cs1) ‘显示未命名cs1

按钮代码2:
Functions.Execute("TableTheme", Tables(e.Form.name & "_table1"),"cs2") ‘不能执行
Functions.Execute("TableTheme", Tables(e.Form.name & "_table1"),cs2) ‘显示未命名cs2

第二个函数:是把样式分开了,是OK的。




 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110528 积分:562524 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/15 22:29:00 [只看该作者]

内部函数:TableTheme
Dim t As Table = Args(0)
Dim 样式 As Table = Args(1)
Dim cs1 As C1.Win.C1FlexGrid.CellStyle = t.Grid.Styles.Add(样式)
if 样式 = "cs1" then
cs1.forecolor = Color.red '表头字体颜色
cs1.backcolor = Color.yellow '表头背景颜色
……
else
cs1.forecolor = Color.red '表头字体颜色
cs1.backcolor = Color.pink '表头背景颜色
……
end if

'表头颜色---------------------------------------------------------------------
For i As Integer = 0 To t.HeaderRows - 1 '表头行数
    For j As Integer = 0 To t.cols.count '所有列,0为行号列,不含行号列就由1开始
        t.Grid.SetCellStyle(i, j, cs1)
    Next
Next

 回到顶部
帅哥哟,离线,有人找我吗?
2425004926
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:712 积分:5559 威望:0 精华:0 注册:2019/11/14 9:36:00
  发帖心情 Post By:2022/8/15 23:06:00 [只看该作者]

感谢老师:测试OK!    总结一下代码,供大家参考
-----------------------------------------------------------------------
内部函数:TableTheme
Dim t As Table = Args(0)
Dim 样式 As String = Args(1)
Dim cs As C1.Win.C1FlexGrid.CellStyle = t.Grid.Styles.Add(样式)
If 样式 = "cs01" Then
    cs.forecolor = Color.red '表头字体颜色
    cs.backcolor = Color.yellow '表头背景颜色
    cs.Border.Width = 1 '表头轮廓宽度
    cs.Border.Color = Color.Silver '表头轮廓颜色
    cs.Border.Direction = 3 ‘0表示有竖线,有下横线;1表示无竖线,有下横线;2表示有竖线,无下横线;3及以后都是有竖线,有下横线
    t.DataTable.SysStyles("Normal").BorderColor = Color.Silver '网格线
    
ElseIf 样式 = "cs02" Then
    cs.forecolor = Color.red '表头字体颜色
    cs.backcolor = Color.Pink '表头背景颜色
    cs.Border.Width = 1 '表头轮廓宽度
    cs.Border.Color = Color.Silver '表头轮廓颜色
    cs.Border.Direction = 3
    t.DataTable.SysStyles("Normal").BorderColor = Color.Silver '网格线
End If

'表头颜色
For i As Integer = 0 To t.HeaderRows - 1 '表头行数
    For j As Integer = 0 To t.cols.count '所有列,0为行号列,不含行号列就由1开始
        t.Grid.SetCellStyle(i, j, cs)
    Next
Next
-----------------------------------------------------------------------
按钮测试
按钮1:Functions.Execute("TableTheme",Tables(e.Form.name & "_table1"),"cs01")
按钮2:Functions.Execute("TableTheme",Tables(e.Form.name & "_table1"),"cs02")
-----------------------------------------------------------------------
选择区域或列时表头更换颜色
AfterSelRangeChange事件
Dim t As Table = Tables(e.Form.name & "_table1")

Dim cs1 As C1.Win.C1FlexGrid.CellStyle = t.Grid.Styles.Add("样式1")
'cs1.forecolor = Color.red '表头字体颜色
cs1.backcolor = Color.yellow '表头背景颜色

Dim cs2 As C1.Win.C1FlexGrid.CellStyle = t.Grid.Styles.Add("样式2")
'cs2.forecolor = Color.red '表头字体颜色
cs2.backcolor = Color.Orchid '表头背景颜色

'选择区域时表头更换颜色
For i As Integer = 0 To t.HeaderRows - 1
    For j As Integer = 1 To t.cols.count '所有列,0为行号列,不含行号列就由1开始
        If j >= t.LeftCol + 1 AndAlso j <= t.RightCol + 1 Then
            t.Grid.SetCellStyle(i, j, cs2)
        Else
            t.Grid.SetCellStyle(i, j, cs1)
        End If
    Next
Next

 回到顶部