第一个问题:显示中文标题
若是数据库表,可修改表结构,设置每个字段的 Caption(标题)为中文,如:将 name 的 Caption 设置为“姓名”。然后,设置表格的 ComumnCount = -1 即可在 Grid 中显示中文列标题。
若是自由表,只能通过修改 Header 的 Caption 了。如:将第一列的列标题设置为“姓名”:THISFORM.Grid1.Columns[1].Header1.Cpation = "姓名"
第二个问题:锁定姓名列
这个比较 Easy,在表单的 Init 事件中输入:THIS.Grid1.LockColumns = 1。注:若 Grid.ColumnCount=-1,则无法在设计环境下直接修改属性 Grid.LockColumn=1
第三个问题:单击列标题实现排序
这个有点难度。
第一步:准备两张图片,第一张是向上箭头 up.bmp,表示升序,第二张是向下箭头 down.bmp,表示降序。
第二步:新建一个 MyProc.prg,其中定义了一个 Header 类:
第三步:在表格的 Init 事件中输入以下代码:
LOCAL oCol,cOldCaption
FOR EACH oCol IN THIS.Columns
cOldCaption = oCol.Header1.Caption && 保存原标题
oCol.RemoveObject('Header1') && 移除原 Header
oCol.NewObject('Header1','MyHeader','myproc.prg') && 添加新 Header
oCol.Header1.Caption = cOldCaption && 恢复原标题
NEXT
若是数据库表,可修改表结构,设置每个字段的 Caption(标题)为中文,如:将 name 的 Caption 设置为“姓名”。然后,设置表格的 ComumnCount = -1 即可在 Grid 中显示中文列标题。
若是自由表,只能通过修改 Header 的 Caption 了。如:将第一列的列标题设置为“姓名”:THISFORM.Grid1.Columns[1].Header1.Cpation = "姓名"
第二个问题:锁定姓名列
这个比较 Easy,在表单的 Init 事件中输入:THIS.Grid1.LockColumns = 1。注:若 Grid.ColumnCount=-1,则无法在设计环境下直接修改属性 Grid.LockColumn=1
第三个问题:单击列标题实现排序
这个有点难度。
第一步:准备两张图片,第一张是向上箭头 up.bmp,表示升序,第二张是向下箭头 down.bmp,表示降序。
第二步:新建一个 MyProc.prg,其中定义了一个 Header 类:
程序代码:
DEFINE CLASS MyHeader as Header name = 'Header1' PROCEDURE Click LOCAL nSelect,cFldName,cAlias,nNum_Tag cAlias = JUSTFNAME(THIS.Parent.ControlSource) && 表名 cFldName = JUSTEXT(THIS.Parent.ControlSource) && 字段名 cOldPict = JUSTSTEM(THIS.Picture) && 当前图片 THIS.Parent.Parent.SetAll('Picture','') && 先去除所有图片 nSelect = SELECT() SELECT (cAlias) nNum_Tag = ATAGINFO(aTag) DO CASE CASE ATC('up',cOldPict) > 0 && 升序时降序 THIS.Picture = 'dowm.bmp' IF nNum_Tag > 0 AND ASCAN(aTag,cFldName,-1,-1,1,7) > 0 && 若索引标记存在,则激活之 SET ORDER TO &cFldName DESC ELSE INDEX ON &cFldName TAG (cFldName) DESC && 索引标记不存在,新建之 ENDIF CASE ATC('down',cOldPict) > 0 && 降序时无序 SET ORDER TO OTHERWISE && 无序时升序 THIS.Picture = 'up.bmp' IF nNum_Tag > 0 AND ASCAN(aTag,cFldName,-1,-1,1,7) > 0 SET ORDER TO &cFldName ELSE INDEX ON &cFldName TAG (cFldName) ENDIF ENDCASE GO TOP THISFORM.Refresh SELECT (nSelect) ENDPROC ENDDEFINE
第三步:在表格的 Init 事件中输入以下代码:
LOCAL oCol,cOldCaption
FOR EACH oCol IN THIS.Columns
cOldCaption = oCol.Header1.Caption && 保存原标题
oCol.RemoveObject('Header1') && 移除原 Header
oCol.NewObject('Header1','MyHeader','myproc.prg') && 添加新 Header
oCol.Header1.Caption = cOldCaption && 恢复原标题
NEXT
[此贴子已经被作者于2016-3-11 14:55编辑过]
泉城飞狐