汇总VB数据库编程中MSHFlexGrid控件用法详解.docx
- 文档编号:6142624
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:13
- 大小:17.35KB
汇总VB数据库编程中MSHFlexGrid控件用法详解.docx
《汇总VB数据库编程中MSHFlexGrid控件用法详解.docx》由会员分享,可在线阅读,更多相关《汇总VB数据库编程中MSHFlexGrid控件用法详解.docx(13页珍藏版)》请在冰点文库上搜索。
汇总VB数据库编程中MSHFlexGrid控件用法详解
[汇总]VB数据库编程中MSHFlexGrid控件用法详解
VB数据库编程中MSHFlexGrid控件用法详解
添加MSHFlexGrid将Name改成flex1
添加text将name改成txtedit
Publicrs1AsNewADODB.Recordset,rs2AsNewADODB.Recordset'定义数据集对象
DimiAsInteger,jAsInteger
SubEditKeyCode(MSHFlexGridAsControl,EdtAsControl,KeyCodeAsInteger,ShiftAs
Integer)
'标准编辑控件处理。
SelectCaseKeyCode
Case27'ESC:
隐藏焦点并将其返回MSFlexGrid
Edt.Visible=False
MSHFlexGrid.SetFocus
Case13'ENTER将焦点返回MSFlexGrid。
MSHFlexGrid.SetFocus
DoEvents
IfMSHFlexGrid.Col MSHFlexGrid.Col=MSHFlexGrid.Col+1 Else IfMSHFlexGrid.Col=MSHFlexGrid.Cols-1Then MSHFlexGrid.Row=MSHFlexGrid.Row+1 MSHFlexGrid.Col=1 EndIf EndIf Case38'向上 MSHFlexGrid.SetFocus DoEvents IfMSFlexGrid.Row>MSFlexGrid.FixedRowsThen MSFlexGrid.Row=MSFlexGrid.Row-1 EndIf EndSelect EndSub Subview_DP() Ifflex1.Col=4Orflex1.Col=5Orflex1.Col=6Then '格式化Flex1表的第7列、第8列、第9列、第11列 flex1.TextMatrix(flex1.Row,5)=Format(flex1.TextMatrix(flex1.Row,5),"0.00") flex1.TextMatrix(flex1.Row,6)=Val(flex1.TextMatrix(flex1.Row,4))* Val(flex1.TextMatrix(flex1.Row,5)) flex1.TextMatrix(flex1.Row,6)=Format(flex1.TextMatrix(flex1.Row,6),"0.00") EndIf DimA,BAsSingle'声明单精度浮点型变量 OnErrorResumeNext Fori=1Toflex1.Rows-1 Ifflex1.TextMatrix(i,1)<>""Andflex1.TextMatrix(i,4)<>""Andflex1.TextMatrix(i,6) <>""Then A=Val(flex1.TextMatrix(i,6))+A'求合计金额 B=Val(flex1.TextMatrix(i,4))+B'求合计数量 EndIf Nexti lblCount=B lblSum=Format(A,"0.00")'格式化合计金额 EndSub SubSetButtons(bValAsBoolean) cmdRegister.Enabled=NotbVal cmdSave.Enabled=bVal cmdCancel.Enabled=bVal flex1.Enabled=bVal Frame1.Enabled=bVal EndSub PrivateSubDataGrid2_KeyDown(KeyCodeAsInteger,ShiftAsInteger) IfKeyCode=vbKeyReturnThen WithAdodc2.Recordset '赋值给flex1表格 If.Fields("商品名称")<>""Thenflex1.TextMatrix(flex1.Row,1)=Trim(.Fields("商 品名称")) If.Fields("规格")<>""Thenflex1.TextMatrix(flex1.Row,2)=Trim(.Fields("规格 ")) If.Fields("单位")<>""Thenflex1.TextMatrix(flex1.Row,3)=Trim(.Fields("单位")) flex1.TextMatrix(flex1.Row,5)=.Fields("成本价") EndWith flex1.Col=4 DataGrid2.Visible=False'DataGrid2不可见 txtEdit.Text="" txtEdit.SetFocus EndIf IfKeyCode=vbKeyEscapeThen'按ESC键DataGrid2不可见 DataGrid2.Visible=False'txtEdit.SetFocus'txtEdit获得焦点 EndIf EndSub PrivateSubdelone_Click() Fori=1Toflex1.Cols-1 flex1.TextMatrix(flex1.Row,i)="" Nexti view_DP EndSub PrivateSubflex1_MouseDown(ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle) '利用PopupMenu方法 IfButtonAndvbRightButtonThen PopupMenuedit'弹出菜单 EndIf EndSub PrivateSubForm_Load() DimiAsInteger '使第一列较窄。 flex1.ColWidth(0)=flex1.ColWidth(0)/2'初始化编辑框 txtEdit="" flex1.Rows=101 flex1.Cols=8 '设置列标头。 s$="^|^商品名称|^规格|^单位 |^数量|^进货价|^金额|^备注" flex1.FormatString=s$ EndSub PrivateSubflex1_KeyPress(KeyAsciiAsInteger) Ifflex1.Col>=4Orflex1.Col=1Then MSHFlexGridEditflex1,txtEdit,KeyAscii EndIf EndSub '添加下列例程以初始化文本框,并将焦点从HierarchicalFlexGrid传递到TextBox控件: SubMSHFlexGridEdit(MSHFlexGridAsControl,EdtAsControl,KeyAsciiAsInteger) '使用已输入的字符。 SelectCaseKeyAscii '空格表示编辑当前的文本。 Case0To32 Edt=MSHFlexGrid Edt.SelStart=1000 '其它所有字符表示取代当前的文本。 CaseElse Edt=Chr(KeyAscii) Edt.SelStart=1 EndSelect '在合适的位置显示Edt。 Edt.MoveMSHFlexGrid.Left+MSHFlexGrid.CellLeft-15,_ MSHFlexGrid.Top+MSHFlexGrid.CellTop-15,_ MSHFlexGrid.CellWidth,_ MSHFlexGrid.CellHeight Edt.Visible=True Edt.SetFocus EndSub PrivateSubflex1_DblClick() Ifflex1.Col>=4Orflex1.Col=1Then MSHFlexGridEditflex1,txtEdit,32'模拟一个空格。 EndIf EndSub PrivateSublblSum_Click() EndSub PrivateSubtxt1_KeyDown(IndexAsInteger,KeyCodeAsInteger,ShiftAsInteger) IfKeyCode=vbKeyReturnAndIndex=0Then Adodc1.RecordSource="供应商信息表where供应商编号like+'%'+'"+txt1(0)+"'+'%'or供应商全称like+'%'+'"+txt1(0)+"'+'%'or简称like+'%'+'"+txt1(0)+"'+'%'" Adodc1.Refresh IfAdodc1.Recordset.RecordCount>0Then DataGrid1.Visible=True DataGrid1.SetFocus Else Adodc1.RecordSource="供应商信息表" Adodc1.Refresh IfAdodc1.Recordset.RecordCount>0Then DataGrid1.Visible=True DataGrid1.SetFocus Else MsgBox"无可选的供应商信息,请首先录入供应商数据~",,"提示窗口" EndIf EndIf EndIf IfKeyCode=vbKeyReturnAndIndex=1Then flex1.Col=1 flex1.Row=1 flex1.SetFocus EndIf EndSub PrivateSubDataGrid1_KeyDown(KeyCodeAsInteger,ShiftAsInteger) IfKeyCode=vbKeyReturnThen txt1(0)=Adodc1.Recordset.Fields("供应商全称") txt1 (1).SetFocus DataGrid1.Visible=False EndIf EndSub PrivateSubtxtEdit_KeyPress(KeyAsciiAsInteger) '删除回车符,以消除嘟嘟声。 IfKeyAscii=Asc(vbCr)ThenKeyAscii=0EndSub PrivateSubtxtEdit_KeyDown(KeyCodeAsInteger,ShiftAsInteger) IfKeyCode=vbKeyReturnAndflex1.Col=1Then Adodc2.RecordSource="商品信息表where商品名称like+'%'+'"+txtEdit+"'+'%'" Adodc2.Refresh IfAdodc2.Recordset.RecordCount>0Then DataGrid2.Visible=True DataGrid2.SetFocus Else Adodc2.RecordSource="商品信息表" Adodc2.Refresh IfAdodc2.Recordset.RecordCount>0Then DataGrid2.Visible=True DataGrid2.SetFocus Else MsgBox"无可选的商品信息,请首先录入商品数据~",,"提示窗口" EndIf EndIf EndIf '只有TextBox控件在“数量”单元格时,才使用以下过程 Ifflex1.Col>=4Then EditKeyCodeflex1,txtEdit,KeyCode,Shift EndIf EndSub '当输入数据并按下ENTER键,或用鼠标单击MSHFlexGrid控件中的另一个单元时, '焦点将返回此控件。 这时TextBox中的文本被复制到活动单元中 PrivateSubflex1_GotFocus() IftxtEdit.Visible=FalseThenExitSub flex1=txtEdit txtEdit.Visible=False view_DP EndSub PrivateSubflex1_LeaveCell() IftxtEdit.Visible=FalseThenExitSub flex1=txtEdit txtEdit.Visible=FalseEndSub PrivateSubcmdCancel_Click() Fori=1Toflex1.Rows-1 Forj=1Toflex1.Cols-1 flex1.TextMatrix(i,j)="" Nextj Nexti SetButtonsFalse txtEdit.Visible=False view_DP EndSub PrivateSubcmdRegister_Click() DimlsphAsInteger'声明一个整型变量 '创建入库票号 rs1.Open"select*from入库主表orderby票号",Cnn,adOpenStatic Ifrs1.RecordCount>0Then IfNotrs1.EOFThenrs1.MoveLast Ifrs1.Fields("票号")<>""Then lsph=Val(Right(Trim(rs1.Fields("票号")),4))+1 txtph.Text=Date&"rk"&Format(lsph,"0000") EndIf Else txtph.Text=Date&"rk"&"0001" EndIf rs1.Close txtDate.Text=Date '设置控件有效或无效 SetButtonsTrue Fori=1Toflex1.Rows-1 Forj=1Toflex1.Cols-1 flex1.TextMatrix(i,j)="" Nextj Nexti txt1(0)="" txt1 (1)="" txt1(0).SetFocus view_DP EndSub PrivateSubcmdSave_Click() DimjsAsInteger Fori=1Toflex1.Rows-1 Ifflex1.TextMatrix(i,1)<>""Andflex1.TextMatrix(i,2)<>""Andflex1.TextMatrix(i, 4)=""Then MsgBox"第"&i&"行录入错误~",,"提示窗口" ExitSub EndIf Ifflex1.TextMatrix(i,1)=""Then js=js+1 EndIf Nexti Ifjs=flex1.Rows-1Then MsgBox"没有要保存的数据~",,"提示窗口" ExitSub EndIf rs1.Open"select*from入库从表",Cnn,adOpenKeyset,adLockOptimistic Fori=1Toflex1.Rows-1 Ifflex1.TextMatrix(i,1)<>""Andflex1.TextMatrix(i,2)<>""Andflex1.TextMatrix(i, 4)<>""Then '添加新记录到"入库从表"中 rs1.AddNew Ifflex1.TextMatrix(i,1)<>""Thenrs1.Fields("商品名称")=flex1.TextMatrix(i,1) Ifflex1.TextMatrix(i,2)<>""Thenrs1.Fields("规格")=flex1.TextMatrix(i,2) Ifflex1.TextMatrix(i,3)<>""Thenrs1.Fields("单位")=flex1.TextMatrix(i,3) rs1.Fields("入库数量")=Val(flex1.TextMatrix(i,4)) rs1.Fields("单价")=Val(flex1.TextMatrix(i,5)) rs1.Fields("金额")=Val(flex1.TextMatrix(i,6)) Ifflex1.TextMatrix(i,7)<>""Thenrs1.Fields("备注")=flex1.TextMatrix(i,7) Iftxtph.Text<>""Thenrs1.Fields("入库票号")=Trim(txtph.Text) rs1.Update Cnn.Execute("update商品信息表set库存数量=库存数量+"& Val(flex1.TextMatrix(i,4))&"where商品名称='"+_ flex1.TextMatrix(i,1)+"'and规格='"+flex1.TextMatrix(i,2)+"'") EndIf Nexti rs1.Close rs2.Open"select*from入库主表",Cnn,adOpenKeyset,adLockOptimistic'打开数据库 rs2.AddNew Iftxtph.Text<>""Thenrs2.Fields("票号")=Trim(txtph.Text) IftxtDate.Text<>""Thenrs2.Fields("入库日期")=Trim(txtDate.Text) Iftxt1(0)<>""Thenrs2.Fields("供应商全称")=txt1(0) Iftxt1 (1)<>""Thenrs2.Fields("经手人")=txt1 (1) rs2.Fields("入库金额")=lblSum rs2.Update rs2.Close '设置控件有效或无效 SetButtonsFalse EndSub PrivateSubcmdQuit_Click() End
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇总 VB 数据库 编程 MSHFlexGrid 控件 用法 详解