Foxtable(狐表)用户栏目专家坐堂 → 关于 RecordGrid 的用法


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

主题:关于 RecordGrid 的用法

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


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
关于 RecordGrid 的用法  发帖心情 Post By:2017/6/18 13:12:00 [只看该作者]

想用  RecordGrid  来展示数据, 但是有一些问题想请教,如下图所示


图片点击可在新窗口打开查看此主题相关图片如下:grid.png
图片点击可在新窗口打开查看

以下问题

1  上图中,数据值右侧显示值的背景色默认为蓝色,能不能改,我想改成白色或其他颜色

   刚才做了一下实验, 背景色为蓝色, 是因为我 指定了表的选定色为蓝色, 现在想问一下,能不能 在 主表中选定行用蓝色,而在 RecordGrid 中用别的颜色呢?如果能,该怎样实现呢?

2  右侧 的数据能不能居中显示, 或者我自己来指定,某列数据居中,靠左或者靠右,或者 字符串靠左,数字靠右, 布尔型居中呢?

3  通过它编辑数据时, 能不能 带原来的录入界面,比如,日期型的, 一点它,弹出日期输入框, 下拉列表型的,比如 男女性别的选择, 数字型的

  或者我自己定义的 输入框
[此贴子已经被作者于2017/6/18 13:27:58编辑过]

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/18 16:50:00 [只看该作者]

 1、

 

Dim rgd As object = Forms("窗口1").Controls("RecordGrid1").basecontrol

rgd.styles.Normal.backcolor = color.red
rgd.cols(1).textalign = 5

 

 

2、

 

Dim brgd = e.Form.Controls("RecordGrid1").basecontrol
Dim rng As C1.Win.C1FlexGrid.CellRange = brgd.GetCellRange(3, 1, 3, 1)
Dim cs1 As C1.Win.C1FlexGrid.CellStyle = brgd.Styles.Add("样式1")
cs1.TextAlign = 6
rng.style = cs1

 

 

3、本来就是继承你表格的控件,不能自己自定义控件。


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


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
  发帖心情 Post By:2017/6/18 21:17:00 [只看该作者]

多谢有点色,

1  我试了第一种方法,发现  执行了  rgd.cols(1).textalign = 5  以后, 字符串 的值 都居中了, boolean 型的还是靠左, 这是怎么回事呢? 其实 我主要是想 让 Boolean 型 的居中

2  第二种方法, 没起作用呀, 请问 是不是要预先定义好  "样式1"  呢?
Dim brgd = e.Form.Controls("RecordGrid1").basecontrol
Dim rng As C1.Win.C1FlexGrid.CellRange = brgd.GetCellRange(3, 1, 3, 1)
Dim cs1 As C1.Win.C1FlexGrid.CellStyle = brgd.Styles.Add("样式1")
cs1.TextAlign = 6
rng.style = cs1

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/18 23:24:00 [只看该作者]

Dim brgd = e.Form.Controls("RecordGrid1").basecontrol
Dim rng As C1.Win.C1FlexGrid.CellRange = brgd.GetCellRange(0, 1, brgd.rows.count-1, 1)
Dim cs1 As C1.Win.C1FlexGrid.CellStyle = brgd.Styles.Add("样式1")
cs1.TextAlign = 5
rng.style = cs1

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


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
  发帖心情 Post By:2017/6/18 23:49:00 [只看该作者]

你好,很感谢 你的帮助,试用了上面的代码,发现确实 boolean 型的 也居中了,但是 显示方式却变了, 原来 是 图形的  打钩 的方式,现在变成了  true  false  的方式, 而且 不能选择,只能手工修改,请问这该怎么办呢? 怎样既能居中,又能 显示  打钩 的方式 呢?

另外还想请教一下, 能不能  做成   字符串 的 靠左, 数字靠右, Boolean 型的 居中呢?

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/19 9:47:00 [只看该作者]

1、boolean无法对齐,这个没办法。

 

2、

 

Dim brgd = e.Form.Controls("RecordGrid1").basecontrol
For i As Integer = 0 To brgd.Rows.count-1
    Dim rng As C1.Win.C1FlexGrid.CellRange = brgd.GetCellRange(i, 1, i, 1)
    Dim cs1 As C1.Win.C1FlexGrid.CellStyle = brgd.Styles.Add("样式" & i)
    Dim cs As C1.Win.C1FlexGrid.CellStyle = rng.style
    If cs.datatype.ToString = Gettype(String).Tostring Then
        cs1.TextAlign = 1
    ElseIf cs.datatype.ToString = Gettype(Boolean).Tostring Then
        cs1.TextAlign = 7
    ElseIf cs.datatype.ToString = Gettype(Date).Tostring Then
        cs1.TextAlign = 7
    Else
        cs1.TextAlign = 7
    End If
    rng.style = cs1
Next

 


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


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
  发帖心情 Post By:2017/6/19 23:04:00 [只看该作者]

经过试验,用上楼 第二个方法,问题很多,不仅仅是居中的问题,还导致了很多别的问题,  最终采用了 第一个代码,也就是

Dim rgd As object = Forms("窗口1").Controls("RecordGrid1").basecontrol

rgd.styles.Normal.backcolor = color.red
rgd.cols(1).textalign = 5


但是  rgd.styles.Normal.backcolor = color.red  没起作用,仅仅是把鼠标放在某一列进行编辑时,才起作用,  效果如下



图片点击可在新窗口打开查看此主题相关图片如下:c.png
图片点击可在新窗口打开查看

我想原因如下:


1  我在  项目加载后, 给所有表  添加了  dt.AddUserStyle("选定行模式", Color.MediumSlateBlue, Color.White)  一个 模式,


2 并在全局表事件  drawcell  时,执行了以下语句


If e.Row.Index=e.Table.RowSel Then

    e.style="选定行模式"

End If


这样所有的表在绘制单元格时,都执行这条语句, 采用  "选定行模式"  绘制,  这个  RecordGrid 也执行了


那么 有么有办法 只让 普通 table执行,, RecordGrid 不执行呢?


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


加好友 发短信
等级:超级版主 帖子:107477 积分:546664 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/6/19 23:10:00 [只看该作者]


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


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
  发帖心情 Post By:2017/6/20 2:35:00 [只看该作者]

你好,我看了你发的连接, 代码 如下

全局代码

 

Public Sub TblBase_OwnerDrawCell(ByVal sender As Object, ByVal e As C1.Win.C1FlexGrid.OwnerDrawCellEventArgs)
    If e.Col >= sender.Cols.Fixed
        e.Style.BackColor = Color.White
    End If
End Sub

 

 

绑定drawcell事件

 

Dim brgd As C1.Win.C1FlexGrid.C1FlexGrid  = e.Form.Controls("RecordGrid1").basecontrol
AddHandler brgd.OwnerDrawCell, AddressOf TblBase_OwnerDrawCell
brgd.refresh


我写了全局代码, 但是 RecordGrid 并不能单独定义  drawcell事件 呀,请问,该怎么办?


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/20 9:00:00 [只看该作者]

测试了一下,9楼的代码有效。

 

Public Sub TblBase_OwnerDrawCell(ByVal sender As Object, ByVal e As C1.Win.C1FlexGrid.OwnerDrawCellEventArgs)
    If e.Col >= sender.Cols.Fixed
        e.Style.BackColor = Color.red
    End If
End Sub


 回到顶部
总数 12 1 2 下一页