回 帖 发 新 帖 刷新版面

主题:查询问题

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 楼


我的意思是把这四句在查询代码中加上。估计是Grid1的数据源重置后,恢复默认设置

12 楼

在 thisform.grid1.RecordSource="lsjfcx" 前面加一句 thisform.grid1.RecordSourcetype=1

thisform.grid1.RecordSourcetype=1 
thisform.grid1.RecordSource="lsjfcx"

13 楼

修改后的代码如下:
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 楼

thisform.GRID1.Column1.AddObject("Check1","Checkbox")
这句话提示CHECK1-Value: 数据类型不匹配!
后来改在GRID里添加,可以一直查询了,但是第二次查询后,去打勾,同样提示 数据类型不匹配。
我要加的列数据类型是  逻辑型  错了吗?

15 楼

谢谢两位老师的帮忙,特别是sywzs老师,现在就差一点点了。
其实这个数据类型不匹配,我昨天用代码的时候就有出现过,后来好像就改成GRID里添加就没注意,
但是是什么原因呢?

16 楼

表明你的那个字段类型不是逻辑型的
另外请教 Bind()是什么函数?怎么在我的帮助文件中找不到?

17 楼

[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 楼

我老实交代,我是网上找的,具体没研究,实在不好意思。

19 楼

谢了,收藏,学习。
我猜想,你初始状态字段顺序同查询语句执行后的顺序不同,也就是说查询结果中逻辑型字段的位置不在原来的位置上

20 楼

所有问题都解决了,就是不清楚为什么所有的属性在GRDI设好,每次查询还要重新设置。
例如thisform.grid1.RecordSourcetype=1
 其实我在GRID中就是设置=1.
sywzs 老师可以帮我回答下吗,这个回答完,就结贴,谢谢两位的帮忙。

我来回复

您尚未登录,请登录后再回复。点此登录或注册