主题:查询问题
xm7050432
[专家分:180] 发布于 2009-12-15 15:13:00
GRID里面第一列添加了CHECK,GRID数据源是临时表。
用以下查询语句出现问题:
IF EMPTY(thisform.combo5.Value)
SELECT * from jfd where 月份=ALLTRIM(thisform.combo1.value) order by 日期,客户 into cursor lsjfcx Readwrite
ELSE
nf1=ALLTRIM(thisform.combo5.Value)
SELECT * from jfd where 月份=ALLTRIM(thisform.combo1.value) and alltrim(str(year(日期)))=nf1 order by 日期,客户 into cursor lsjfcx Readwrite
endif
thisform.grid1.RecordSource="lsjfcx"
thisform.grid1.Refresh
ThisForm.Grid1.AutoFit(.T.)
IF RECCOUNT()<1
MESSAGEBOX("没有找到相关记录!",0+48,"信息提示")
else
thisform.text1.value=alltrim(STR(RECCOUNT()))
THISFORM.text1.REFRESH
ENDIF
Thisform.grid1.SetAll("DynamicBackColor","iif(Mod(Recno(),2)=1,RGB(255,255,255),RGB(192,192,192))","Column")
thisform.command8.Enabled= .T.
thisform.command10.Enabled= .T.
Thisform.grid1.Bind()
***********以下这三句是发现问题后加进去的,但是好像没效果
thisform.grid1.AllowCellSelection= .T.
thisform.grid1.ReadOnly= .T.
thisform.grid1.Column1.ReadOnly= .F.
第一次按查询后,第一列的check是可以修改的状态,第二次,第三次在按查询第一列就是不能修改的状态了,整个GRID都是只读状态,不知道哪里出了问题,请老师们帮忙下。
回复列表 (共22个回复)
11 楼
LuckyLine [专家分:1940] 发布于 2009-12-18 15:13:00
我的意思是把这四句在查询代码中加上。估计是Grid1的数据源重置后,恢复默认设置
12 楼
sywzs [专家分:5650] 发布于 2009-12-18 15:51:00
在 thisform.grid1.RecordSource="lsjfcx" 前面加一句 thisform.grid1.RecordSourcetype=1
即
thisform.grid1.RecordSourcetype=1
thisform.grid1.RecordSource="lsjfcx"
13 楼
sywzs [专家分:5650] 发布于 2009-12-18 15:57:00
修改后的代码如下:
nf1=ALLTRIM(thisform.combo5.Value)
SELECT * from jfd where 月份=ALLTRIM(thisform.combo1.value) and alltrim(str(year(日期)))=nf1 order by 日期,客户 into cursor lsjfcx readwrite
thisform.grid1.RecordSourcetype=1
thisform.grid1.RecordSource="lsjfcx"
thisform.GRID1.Column1.AddObject("Check1","Checkbox")
thisform.grid1.Column1.currentcontrol="Check1"
thisform.grid1.Column1.Check1.Caption=""
ThisForm.Grid1.Column1.Check1.Visible=.t.
ThisForm.Grid1.Column1.Sparse=.f.
14 楼
xm7050432 [专家分:180] 发布于 2009-12-18 16:47:00
thisform.GRID1.Column1.AddObject("Check1","Checkbox")
这句话提示CHECK1-Value: 数据类型不匹配!
后来改在GRID里添加,可以一直查询了,但是第二次查询后,去打勾,同样提示 数据类型不匹配。
我要加的列数据类型是 逻辑型 错了吗?
15 楼
xm7050432 [专家分:180] 发布于 2009-12-18 16:49:00
谢谢两位老师的帮忙,特别是sywzs老师,现在就差一点点了。
其实这个数据类型不匹配,我昨天用代码的时候就有出现过,后来好像就改成GRID里添加就没注意,
但是是什么原因呢?
16 楼
LuckyLine [专家分:1940] 发布于 2009-12-18 18:40:00
表明你的那个字段类型不是逻辑型的
另外请教 Bind()是什么函数?怎么在我的帮助文件中找不到?
17 楼
xm7050432 [专家分:180] 发布于 2009-12-19 08:51:00
[quote]表明你的那个字段类型不是逻辑型的
另外请教 Bind()是什么函数?怎么在我的帮助文件中找不到?[/quote]
选择字段我是设置逻辑型,sywzs老师还在吗?帮我看看这个问题。
BIND()说实话我也不知道是什么函数,但是用于点击表头自动排序的,是在GRID里添加3个新的属性之一。
具体如下
Unbindevents(This)
This.SetAll("MousePointer",1,"Header")
For Each oControl In This.Columns
Bindevent(oControl.Controls(1),"Click",This,"grhClick")
Endfor
另外两个属性一个是 [color=0000FF]grhClick [/color]
If This.isSort = .F.
Return
Endif
*!* 用Aevents函数返回呼叫这个事件的对象(同BindEvents绑定使用),也就是判断哪个Column的Header被点击
*!* 调用grd.GetFieldTag判断该字段是否已索引
Local Array laEvents[1]
Try
Private lcSourceAlias,lcControlSource,lcField,lcTag,Ftag,lnBuffer,lcSortGrc
Local lcSourceAlias,lcControlSource,lcField,lcTag,Ftag,lnBuffer,lcSortGrc
Aevents(laEvents,0)
lcSourceAlias = laEvents[1,1].Parent.Parent.RecordSource
lcControlSource = laEvents[1,1].Parent.ControlSource
lcSourceAlias = Iif(!Empty(lcSourceAlias),lcSourceAlias,Substr(lcControlSource,1,At(".",lcControlSource)-1))
lcSourceAlias = Iif(!Empty(lcSourceAlias),lcSourceAlias,Alias())
lcField = Substr(lcControlSource,At(".",lcControlSource)+1)
*--
If Empty(lcSourceAlias)
Return
Endif
If Empty(lcField)
Return
Endif
lcTag = "SortTag"
Ftag = This.GetFieldTag(lcSourceAlias,lcField)
Select (lcSourceAlias)
*--
lnBuffer = CursorGetProp("Buffering")
If lnBuffer > 3
CursorSetProp("Buffering" ,3)
Endif
*--
lcSortGrc = This.SortGrc
If !Empty(This.SortGrc)
This.&lcSortGrc..Header1.Picture=""
Endif
This.SortGrc= laEvents[1,1].Parent.Name
Select(lcSourceAlias)
If Empty(Ftag)
If laEvents[1,1].Tag = "Down"
Inde On &lcField Tag &lcTag Descending
laEvents[1,1].Picture = Iif(File("Down.bmp"),"Down.bmp","")
laEvents[1,1].Tag = "Up"
Else
Inde On &lcField Tag &lcTag Ascending
laEvents[1,1].Picture = Iif(File("Up.bmp"),"Up.bmp","")
laEvents[1,1].Tag = "Down"
Endif
Else
If laEvents[1,1].Tag = "Down"
Set Order To (Ftag) Descending
laEvents[1,1].Picture = Iif(File("Down.bmp"),"Down.bmp","")
laEvents[1,1].Tag = "Up"
Else
Set Order To (Ftag) Ascending
laEvents[1,1].Picture = Iif(File("Up.bmp"),"Up.bmp","")
laEvents[1,1].Tag = "Down"
Endif
Endif
If lnBuffer > 3
CursorSetProp("Buffering" ,lnBuffer)
Endif
Go Top
This.Refresh
Catch
Endtry
最后一个属性:[color=FF0000]getfieldtag[/color]
Lparameter tcAlias,tcField
Local lnTags,lnI,lcKey,lcTag
lcTag = ""
If Used(tcAlias)
lnTags = Tagcount("",tcAlias)
For lnI = 1 To lnTags
lcKey = Key("",lnI,tcAlias)
If Upper(Alltrim(lcKey)) = Upper(Alltrim(tcField))
lcTag = Upper(Tag("",lnI,tcAlias))
Exit
Endif
Endfor
Endif
Return lcTag
18 楼
xm7050432 [专家分:180] 发布于 2009-12-19 08:53:00
我老实交代,我是网上找的,具体没研究,实在不好意思。
19 楼
LuckyLine [专家分:1940] 发布于 2009-12-19 18:45:00
谢了,收藏,学习。
我猜想,你初始状态字段顺序同查询语句执行后的顺序不同,也就是说查询结果中逻辑型字段的位置不在原来的位置上
20 楼
xm7050432 [专家分:180] 发布于 2009-12-21 17:11:00
所有问题都解决了,就是不清楚为什么所有的属性在GRDI设好,每次查询还要重新设置。
例如thisform.grid1.RecordSourcetype=1
其实我在GRID中就是设置=1.
sywzs 老师可以帮我回答下吗,这个回答完,就结贴,谢谢两位的帮忙。
我来回复