  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		zfgg
 
 
  註冊時間: 2004-05-31 文章: 179 來自: 中国
  第 1 樓
  | 
		
			
				 發表於: 星期三 八月 11, 2004 4:27 pm    文章主題: 如何将grid中的数据(本地表.dbf)写到SQL数据库的表中 | 
				     | 
			 
			
				
  | 
			 
			
				我正在研究grid。
 
我的想法是:在grid的某一个单元格中,加一个comboBox控件,ComboBox与数据表某字段捆定,当在comboBox控件中选中一个数据时,其它表格的单元格自动加入相应的值。其中有一个column6列。还有另外二个字段是空的,分别是column7列,column8列。我要在column7中填入数据后,自动与column6的值相乘,将积的结果自动显示在column8列中。然后再重复以上的方法。如果有多行,还要统计column8的和,并在表单的一个editbox控件中显示出来。
 
最后将grid的数据及其它的相关信息写到表中。
 
 
我现在研究的进展是:
 
不能在grid单元格的comboBox控件中选择数据,而是在表单中,单独放一个comboBox控件。在comboBox控件的keypress事件中,输入一个数据,从表中找出一个或第N个数据,将这个数据值增加(additem)到comboBox的列表中。在comboBox控件click事件中,选中某一个值时,将各个数据值存放到本地的一个临时表中。grid中即显示所选的数据。在“数量” 单元格(column7)中,填入数量后,回车,用数量乘以单价(column6),在另一单元格(column8)中显示结果(积),达到计算目的。同时,将各个的column8的和,累计放在一个editbox中。这些能运行通过。
 
 
删除grid中的某一条记录,用的deleted方法,进行标记。在删除按钮中的事件中,用
 
   sele dluser
 
    set delete on
 
 sum  ypjer  to  nTotal
 
thisform.text10.value=nTotal
 
  thisform.grid1.recordsource="dluser"
 
thisform.refresh来实现。这种方法,只是不显示有删除标记的,实际上数据还在里面,用pack后,grid1呈现一空白。
 
 
附:
 
1,grid1的 init 事件:
 
thisform.command5.enabled=.f.
 
#INCLUDE sumahead.H
 
set exclusive on
 
use _path_loc+"dluser"
 
delete all
 
pack
 
set delete on
 
thisform.grid1.recordsource='dluser'
 
 
2, grid1的 deleted 事件:
 
LPARAMETERS nRecNo
 
publi _xmdm
 
if  nRecNo => 1
 
if  deleted()=.t.
 
thisform.command5.enabled=.f.
 
else
 
go nRecNo
 
_xmdm=xmdm
 
thisform.command5.enabled=.t.
 
endif
 
endif
 
 
3,combo1的krypress 事件:
 
LPARAMETERS nKeyCode, nShiftAltCtrl
 
if nKeyCode=13
 
#INCLUDE sumahead.H
 
handle=sqlconnect(SQLDSN_LOC,SQLUSER_LOC,SQLPWD_LOC)
 
_ypdm=alltrim(this.text)
 
cx="select xmdm,xmmc,pym,xmxgg,xmxdw,ykdj from wjbmms where pym=?_ypdm"
 
tf=sqlexec(handle,cx,'temp')
 
if tf>-1
 
select temp
 
if recc()>0
 
this.clear
 
for i =1 to recc()
 
go i
 
this.additem(xmdm+xmmc+pym+xmxgg+xmxdw+str(ykdj,10,2) )
 
endfor
 
this.displayvalue=this.list(1)
 
endif
 
endif
 
sqldisconnect(handle)
 
endif
 
 
4,combo1的click 事件:
 
#INCLUDE sumahead.H
 
public _xmdm,_xmmc,_pym,_xmxgg,_xmxdw,_ykdj
 
for icount =1 to thisform.combo1.listcount
 
 if thisform.combo1.selected(icount)
 
	select temp
 
	go icount
 
	 _xmdm=xmdm
 
	_xmmc=xmmc
 
	_pym=pym
 
	_xmxgg=xmxgg
 
	_xmxdw=xmxdw
 
	_ykdj=ykdj
 
	*wait window str(_ykdj,10,2)
 
	if !used('dluser')
 
	use _path_loc+"dluser"
 
	endif
 
	select dluser	
 
	append blank
 
	replace xmdm with _xmdm
 
	replace xmmc with _xmmc
 
	replace pym with _pym
 
	replace xmxgg with _xmxgg
 
	replace xmxdw with _xmxdw
 
	replace ykdj with _ykdj		
 
    exit
 
 endif
 
endfor
 
this.displayvalue=''
 
thisform.refresh
 
 
5,自定议的表单autocount事件:
 
LOCAL nAcCol,nReCol,nReRow,nCol6val,nCol7val
 
nAcCol=This.Grid1.ActiveColumn &&获得当前列
 
nReRow=This.Grid1.RelativeRow  &&获得当前相对行
 
nReCol=This.Grid1.RelativeColumn  &&获得当前相对列
 
IF nAcCol< This.Grid1.ColumnCount &&不到表格的列尾
 
 This.Grid1.ActivateCell(nReRow,nReCol-1)    &&-1=column6.text1.value.如果不-1, 都用第一个値的数相乘
 
  nCol6val=thisform.grid1.column6.text1.value
 
  nCol7val=thisform.grid1.column7.text1.value
 
     thisform.grid1.column8.text1.value=nCol6val*nCol7val
 
     thisform.text10.value=thisform.text10.value+(nCol6val*nCol7val)
 
     nCol6val=0
 
     nCol7val=0
 
   Thisform.combo1.Setfocus
 
ELSE   &&到达列尾,自动移动到第一列
 
      Thisform.Grid1.Column1.Setfocus
 
      This.Grid1.ActivateCell(nReRow,1)
 
ENDIF    
 
Thisform.Refresh
 
	
 
6,在grid1.column7.text1 keypress事件中调用autocount事件:
 
IF nKeyCode=13
 
 NODEFAULT 
 
Thisform.Autocount
 
ENDIF    
 
 
7, 删除grid1有标记的按钮事件:
 
if messagebox("现在要删除"+ _xmdm+",真的要删除吗?",36,"删除")=6
 
   select dluser
 
   set delete on
 
    sum ypjer to _jiner 
 
	thisform.text10.value=_jiner
 
this.enabled=.f.
 
endif
 
thisform.refresh
 
 
ComboBox控件的additem的方法好象对字段的.null.值产生错误。下列语名运行时程序出错。
 
 this.additem(xmdm+xmmc+pym+xmxgg+xmxdw+str(ykdj,10,2) )
 
其中的xmxgg与xmxdw是字符型。分别代表规格与单位。我试图重新赋值或用空字符串,都失败。
 
 
以上问题归纳起来有以下几个:
 
1、	在grid某一个单元格中加一个comboBox控件,要显示某一个字段的内容。若有N个,列表显示。其它的单元格显示相应的内容。
 
2、	如何将grid中的数据(本地表.dbf)写到SQL数据库的表中。
 
3、	如何删除grid中的某一条记录。使thisform.text10.value的值也相应减少。
 
4、	解决ComboBox控件的additem的方法中的.null.值错误。
 
5、	我目前用的上述方法,是否欠妥,还有没有更好的方法? | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |