抚州信息网
美食
当前位置:首页 > 美食

如何实现将vsflexgrid中修改的数据反馈到数据库中

发布时间:2019-09-13 19:52:02 编辑:笔名

如何实现将vsflexgrid中修改的数据反馈到数据库中?

PrivateSubvsflexgrid1_AfterEdit(ByValRowAsLong,ByValColAsLong)

rs.MoveFirst'//rs为记录集

rs.Movevsflexgrid1.Row-1

rs.Edit

Ifvsflexgrid1.text=""Then

rs.Fields(vsflexgrid1.Col-1)=Null

Else

rs.Fields(vsflexgrid1.Col-1)=vsflexgrid1.text

EndIf

rs.Update

endsub

一、增加记录使用for来循环表格行。

fori=1togrid1.rows-1

withrs

.addnew

.fileds(o)=grid1.textmariy(i,0)

.fileds(1)=grid1.textmariy(i,1)

.fileds(2)=grid1.textmariy(i,2)

.fileds(3)=grid1.textmariy(i,3)

.update

endwith

next

二、添加行

grid1.additemrow

三、删除当前行

withgrid1

i=.row

.removeitemi

endwith

四、要显示下拉框,可以使用vsflexgrid中列绑定功能

grid1.colcombolist(1)=grid.buildcombolist(rs,"商品名称")

跟楼上的相比,仅仅是datamode不一样(2-flexDMBoundBatch)

但这样做的优势是非常明显的:可以撤销包括新增删除在内的所有操作,按保存键才写入数据库

PrivateSubCmdDel_Click()

If fg.Row<>0Thenfg.RemoveItem(fg.Row)

fg.Refresh

EndSub

PrivateSubCmdAdd_Click()

OnErrorResumeNext

Adodc1.Recordset.AddNew

IfErr.Number<>0ThenMsgBoxErr.Description

EndSub

PrivateSubCmdUpdate()

Adodc1.Recordset.UpdateBatchadAffectAllChapters

EndSub

PrivateSubCmdCancel_Click()

Adodc1.Recordset.CancelBatch

fg.DataRefresh

EndSub

PrivateSubForm_Load()

Adodc1.ConnectionString="FILENAME="&App.Path&"conn.dsn"

Adodc1.LockType=adLockBatchOptimistic

Adodc1.RecordSource="Your_Tablename"

Setfg.DataSource=Adodc1

EndSub

1、打印vsflexgrid可以使用vsprinter打印控件。跟vsflexgrid配套使用效果不错。

2、导出EXECL,可以使用grid.savegrid的方法。

用savegrid的方法,在导出execl时,如果碰到类似于银行帐号的列如:“6465456665”,导到EXECL中就不这样显示了,这个问题还不知道怎么解决??

另外也可以写代码(这个方法比较实用,但慢一些):

DimexcelAppAsExcel.Application

SetexcelApp=NewExcel.Application

OnErrorResumeNext

IfexcelAppIsNothingThen

SetexcelApp=CreateObject("Excel.application")

IfexcelAppIsNothingThen

ExitSub

EndIf

EndIf

excelApp.Visible=True

Me.MousePointer=vbHourglass

excelApp.Workbooks.Add

WithexcelApp.ActiveSheet

DimiAsInteger,jAsInteger

Fori=1ToGrid1.rows

Forj=1ToGrid1.Cols

.Cells(i,j).value="'"&Grid1.TextMatrix((i-1),(j-1))'加上“'”号则可以解决上面savegrid中银行帐号的导出问题。

Nextj

DoEvents

Nexti

EndWith

Me.MousePointer=vbDefault

SetexcelApp=Nothing

EndSub

EXCEL同Vsflexgrid通过

最近很多的朋友,都想知道EXCEL怎样同VSflexgrid交换数据。

实际上,利用“复制”、“粘贴”菜单即可实现。具体如下:

(1)在Vsflexgrid上弹出右键菜单

PrivateSubgrid1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,yAsSingle)

ifButton=2ThenPopupMenumnutccd

EndSub

(2)设置各菜单的内容

A复制

Clipboard.Clear

Clipboard.SetTextgrid1.Clip

B剪切

DimrowcAsLong

DimrowzAsLong

DimcolcAsLong

dimcolzAsLong

dimiaslong

dimsaslong

Ifgrid1.Rows=1ThenExitSub

Clipboard.Clear

Clipboard.SetTextgrid1.Clip

Ifgrid1.RowSel>grid1.rowThen

rowc=grid1.row

rowz=grid1.RowSel

Else

rowc=grid1.RowSel

rowz=grid1.row

EndIf

Ifgrid1.ColSel>grid1.ColThen

colc=grid1.Col

colz=grid1.ColSel

Else

colc=grid1.ColSel

colz=grid1.Col

EndIf

Fori=rowcTorowz

Fors=colcTocolz

grid1.TextMatrix(i,s)=""

Next

Next

C粘贴(精华部分)

DimiAsLong

DimsAsLong

DimmAsLong

DimtAsLong

Ifgrid1.Rows=1ThenExitSub

t=Len(Clipboard.GetText)

Ift=0ThenExitSub

Fori=1Tot

IfMid(Clipboard.GetText,i,1)=Chr(9)Thens=s+1

IfMid(Clipboard.GetText,i,1)=Chr(13)Thenm=m+1

Next

Ifs/(m+1)+grid1.Col>grid1.Cols-1Then

grid1.ColSel=grid1.Cols-1

Else

grid1.ColSel=s/(m+1)+grid1.Col

EndIf

Ifgrid1.row+m>grid1.Rows-1Then

grid1.RowSel=grid1.Rows-1

Else

grid1.RowSel=grid1.row+m

EndIf

grid1.Clip=Clipboard.GetText

VSFlexGrid常用属性或方法:

.FixedRows=1'固定几行

.FixedCols=1'固定几列

.Editable=True'允许修改

.AllowUserResizing=flexResizeBoth'可调整行/列

.FocusRect=flexFocusNone'无虚框

.SelectionMode=flexSelectionListBox'焦点选中样式

.BackColor=RGB(255,255,255)'单元背景色

.BackColorSel=vbBlue'单元选择色

.BackColorFixed=RGB(208,192,160)'固定单元色

.BackColorAlternate=RGB(255,250,230)'间隔行背景色

.GridColor=RGB(245,240,210)'单元线条色

.ForeColor=RGB(0,0,0)'单元前景色(字符色)

.RowHeightMin=260'最小行高

.RowHeightMax=800'最大行高

.ColHeightMin=50'最小列宽

.ColHeightMax=3000'最大列宽

.ColWidth(Col)=1000'指定列宽

.RowHeight(Row)=260'指定行高

.TextMatrix(Row,Col)="Text"'指定单元字符

.Text="Text"'选定单元字符

.MergeCol(Col)=True'允许合并列

.MergeRow(Row)=True'允许合并行

.MergeCells=0|1|2|3|4|5|6'合并选项

.Cell(选项准则,Row1,Col1,Row2,Col2)'选择部分的相应准则值

.EditCell'当移动到当前单元时自动选择

.EditSelStart'移动到单元时的光标位置

.MousePointer'设置对象的鼠标指针样式O.A=0到15|99

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

几个特殊的属性方法的使用:

FormatString属性:管道符格式化字符串示例:

下面定义对齐方式同字意,列宽窄同距离

VSG1.FormatString="^中|<左|>右|>右|^中"

+++++++++++++++++++++++++

搜索(查找)表格中符合条件的行:

FindRow属性:该属性返回一个行值

MsgBoxVSG1.FindRow(关键词,[指定行],[指定列],[敏感],[精度])

关键词:String,表示要搜索的字符串

指定行/指定列:Long,表示只在指定的行或列中找

敏感:Boolean,

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

'限制只能在指定列输入(这里默认倒数第2列)

PrivateSubVSG1_BeforeRowColChange(ByValOldRowAsLong,_

ByValOldColAsLong,ByValNewRowAsLong,_

ByValNewColAsLong,CancelAsBoolean)

VSG1.Editable=flexEDKbd

IfVSG1.Redraw<>flexRDNoneAndNewCol<>VSG1.Cols-2Then

Cancel=True

VSG1.SelectNewRow,VSG1.Cols-2

EndIf

EndSub

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

限制不能编辑某些列:(这里限制第1列和第3列)

PrivateSubVSG1_RowColChange()

IfVSG1.Col=1OrVSG1.Col=3Then

VSG1.FocusRect=flexFocusNone

VSG1.Editable=flexEDNone

'SendKeys""

Else

VSG1.Editable=flexEDKbd

SendKeys""

EndIf

EndSub

或:

PrivateSubVSG1_RowColChange()

IfVSG1.Col=1OrVSG1.Col=3Then

SendKeys""

Else

SendKeys""

EndIf

EndSub

或:

PrivateSubVSG1_RowColChange()

IfVSG1.Col=1OrVSG1.Col=3Then

VSG1.Editable=flexEDNone

Else

VSG1.Editable=flexEDKbd

VSG1.EditCell'自动选择单元内容

VSG1.EditSelStart=0[选到最前]|1[选到指定]|Len(VSG1.Text)[选到最后]

EndIf

EndSub

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

'对齐方式(-1标示所有)

.ColAlignment(-1)=flexAlignLeftCenter|flexAlignCenterCenter|flexAlignRightCenter

示例1:(最后一行的第3列靠右对齐)

VSG1.SelectVSG1.Rows-1,2

VSG1.CellAlignment=flexAlignRightCenter

示例2:

VSG1.Row=VSG1.Rows-1:VSG1.Col=1

VSG1.CellAlignment=flexAlignRightCenter

示例3:

VSG1.Cell(flexcpAlignment,VSG1.Rows-1,1,VSG1.Rows-1,3)=flexAlignRightCenter

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

本对象拖放:

PrivateSubVSG1_MouseDown(ButtonAsInteger,_

ShiftAsInteger,XAsSingle,YAsSingle)

VSG1.Drag

VSG1.DragIcon=LoadPicture("D:Icon.ico")

VSG1.DragRowVSG1.RowSel

EndSub

或从其它对象拖:

PrivateSubVSG2_MouseDown(ButtonAsInteger,_

ShiftAsInteger,XAsSingle,YAsSingle)

VSG2.OLEDrag

VSG1.OLEDropMode=flexOLEDropAutomatic

EndSub

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

PublicSubVSGridCount(OptionalSelRowAsLong,OptionalSelColAsLong)

DimXAsLong,iAsLong

DimHj1,Hj2,Hj3AsString

ConstA1=-922337203685477#,A2=922337203685477#

OnErrorGoToErrTransact

WithfrmFG.VSG1

X=.Rows-1

.MergeCells=flexMergeFree

.MergeRow(X)=True

.Cell(flexcpText,X,0,X,1)="合计"

If.Rows=3Then

.TextMatrix(X,0)=0

.Cell(flexcpText,X,2,X,14)=""

.Cell(flexcpText,X,16,X,17)="¥0.00"

ExitSub

EndIf

'Hj1=Val(.Aggregate(flexSTSum,2,2,X-1,2))

'Hj2=Val(.Aggregate(flexSTSum,2,16,X-1,16))

'Hj3=CurrencyToStr(Hj2)

Fori=2ToX-2

Hj1=Hj1+Val(.TextMatrix(i,15))

IfVal(.TextMatrix(i,16))>0Then

Hj2=Hj2+Val(.TextMatrix(i,15))*Val(.TextMatrix(i,16))

EndIf

Nexti

IfHj2<=A1OrHj2>=A2Then

GoToErrTransact

EndIf

Hj3=CurrencyToStr(Hj2)

.TextMatrix(X,2)=Hj1

.Cell(flexcpText,X,3,X,15)=IIf(Hj3="","",Hj3)

.Cell(flexcpText,X,16,X,17)=Format(Hj2,"¥0.00")

.Cell(flexcpAlignment,X,2,X,14)=flexAlignLeftCenter

'.SelectX,3

'.CellAlignment=flexAlignLeftCenter

IfSelRow>1AndSelCol>0Then.SelectSelRow,SelCol

EndWith

ExitSub

ErrTransact:

MsgBox"你输入的数字过大无法计算!请修改!!!"

EndSub

------------------------------------------------

将数字转换为大写金额的函数:

FunctionCurrencyToStr(ByValNumberAsCurrency)AsString

Number=Val(Trim(Number))

IfNumber=0ThenCurrencyToStr="":ExitFunction

Dimstr1AryAsVariant,str2AryAsVariant

str1Ary=Split("零壹贰叁肆伍陆柒捌玖")

str2Ary=Split("分角元拾佰仟万拾佰仟亿拾佰仟万拾佰")

DimaAsLong,bAsLong'循环基数

Dimtmp1AsString'临时转换

Dimtmp2AsString'临时转换结果

DimPointAsLong'小数点位置

IfNumber<=-922337203685477#OrNumber>=922337203685477#Then

ExitFunction

EndIf

tmp1=Round(Number,2)

tmp1=Replace(tmp1,"-","")'先去掉“-”号

Point=InStr(tmp1,".")'取得小数点位置

IfPoint=0Then'如果有小数点,最大佰万亿

b=Len(tmp1)+2'加2位小数

Else

b=Len(Left(tmp1,Point+1))'包括点加2位小数

EndIf

''先将所有数字替换为中文

Fora=9To0Step-1

tmp1=Replace(Replace(tmp1,a,str1Ary(a)),".","")

Next

Fora=1Tob

b=b-1

IfMid(tmp1,a,1)<>""Then

Ifb>UBound(str2Ary)ThenExitFor

tmp2=tmp2&Mid(tmp1,a,1)&str2Ary(b)

EndIf

Next

Iftmp2=""ThenCurrencyToStr="":ExitFunction

''〓下面为非正式财务算法,可以去掉〓

Fora=1ToLen(tmp2)

tmp2=Replace(tmp2,"零亿","亿零")

tmp2=Replace(tmp2,"零万","万零")

tmp2=Replace(tmp2,"零仟","零")

tmp2=Replace(tmp2,"零佰","零")

tmp2=Replace(tmp2,"零拾","零")

tmp2=Replace(tmp2,"零元","元")

tmp2=Replace(tmp2,"零零","零")

tmp2=Replace(tmp2,"亿万","亿")

Next

''〓上面为非正式财务算法,可以去掉〓

IfPoint=1Thentmp2="零元"+tmp2

IfNumber<0Thentmp2="负"+tmp2

IfPoint=0Thentmp2=tmp2+"整"

CurrencyToStr=tmp2

EndFunction

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Cell属性的使用:

Cell的作用是给以选定区块的特定的设置值,具体值可参阅相应属性值。

语法:Cell(条件准则,Row1,Col1,Row2,Col2)=相应准则值

其中的“条件准则”有以下准则常数,根据准则的不同而设置相应准则的值:

flexcpAlignment对齐方式

flexcpBackColor背景色

flexcpChecked选择框

flexcpCustomFormat格式设置

flexcpData日期

flexcpFloodColor颜色

flexcpFloodPercent背景色

flexcpFont字体

flexcpFontBold粗体

flexcpFontItalic斜体

flexcpFontName字体名

flexcpFontSize字体大小

flexcpFontStrikethru删除线

flexcpFontUnderline下划线

flexcpFontWidth字符宽

flexcpForeColor字符色

flexcpHeight高

flexcpLeft左

flexcpPicture添加图

flexcpPictureAlignment图对齐

flexcpRefresh刷新

flexcpSort分类

flexcpText字符

flexcpTextDisplay显示字符

flexcpTextStyle文本样式

flexcpTop返回顶端高,同RowPos和valueMatrix属性

flexcpvalue返回字符值

flexcpVariantvalue返回字符值

flexcpWidth返回单元宽

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

flexSTSum方法:每行增加小计行[这个方法还不会用]语法:

VSG.flexSTSum常数名,

[GroupOnAsLong],:标签列

[TotalOnAsLong],:计算列

[FormatAsString],:格式,例".00"

[BackColorAsColor],:Color

[ForeColorAsColor],:Color

[FontBoldAsBoolean],:False|True

[CaptionAsString],:例"数%s"

[MatchFromAsInteger],:0|1|2|3

[TatalOnlyAsBoolean]:False|True

常数名:

常数常数值说明

flexSTNone0大纲唯一的,没有合计价值

flexSTClear1清除全部的小计

flexSTSum2总数

flexSTPercent3总数的百分比

flexSTCount4行数

flexSTAverage5平均

flexSTMax6最大的

flexSTMin7最小的

flexSTStd8标准偏差

flexSTVar9方差

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

MousePointer、MouseIcon鼠标指针的应用:

0=flexDefault

1=flexArrow

2=flexCross

3=flexIBeam

4=flexIcon

5=flexSize

6=flexSizeNESW

7=flexSizeNS

8=flexSizeNWSE

9=flexSizeEW

10=flexUpArrow

11=flexHourglass

12=flexNoDrop

13=flexArrowHourGlass

14=flexArrowQuestion

15=flexSizeAll

50=flexPointerCopy'(&H32)'拖动带拷贝

51=flexPointerMove'(&H33)'拖动

52=flexSizeHorz'(&H34)'左右调整

53=flexSizeVert'(&H35)'上下调整

54=flexHand'(&H36)手型

99=flexCustom'自定义

ConstMA="50,51,52,53,54"

DimxyAsInteger

xy=Val(Text1.Text)

Ifxy>15Andxy<>99AndInStr(MA,xy)=0Thenxy=15

VSG1.MousePointer=xy

Ifxy=99Then

VSG1.MouseIcon=LoadPicture("C:iconIcon.ico")

EndIf

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

单击列头将列互相拖动调换:

方法一:

VSG1.ExplorerBar=flexExMove'2这是最简单的方法了

注意这个属性在VB属性表中只设置了0、1、2、3、5、7、8种常数值

ExplorerBar属性(value=0|1|2|3|5|7|8):

0-flexExNone:默认,单击列头选择整列,单击行头选择整行

1-flexExSort:单击列头可正反排序该列,单击行头选择整行

2-flexExMove:单击列头可交换列顺序,单击行头选择整行

3-flexExSortAndMove:具有1和2的功能

4:单击列头可正反排序该列并在列头显示相应箭头,单击行头选择整行

5-flexExSortShow:好像与4相同也

6:具有2和4的功能

7-flexExSortShowAndMove:好像与6相同也

8-flexExMoveRows:单击列头选择整列,可拖动行

9:单击列头可正反排序该列,可拖动行

10:可拖动行与列

11:可排序列及拖动行列

12:可排序列并在列头显示相应箭头,还可拖动行

13:同12。

14:除12功能外,可拖动列

15:同14。

方法二:

PrivateSubVSG1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)

Dimr%,c%

r=VSG1.MouseRow

c=VSG1.MouseCol

Ifr=0Andc>0Then

VSG1.Tag=c

VSG1.Cell(flexcpBackColor,0,c)=vbYellow

VSG1.MousePointer=flexPointerMove

EndIf

EndSub

PrivateSubVSG1_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)

IfLen(VSG1.Tag)Then

Dimr%,c%,p%

r=VSG1.MouseRow

c=VSG1.MouseCol

Ifr=0Andc>0Thenp=flexPointerMove

IfVSG1.MousePointer<>pThenVSG1.MousePointer=p

EndIf

EndSub

PrivateSubVSG1_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)

IfLen(VSG1.Tag)Then

Dimr%,c%,target%

target=VSG1.Tag

VSG1.Cell(flexcpBackColor,0,target)=0

VSG1.Tag=""

VSG1.MousePointer=0

r=VSG1.MouseRow

c=VSG1.MouseCol

Ifr=0Andc>0Andc<>targetThen

VSG1.ColPosition(target)=c

EndIf

EndIf

EndSub

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

VSFlexString控件属性一览表

CaseSensitive???

Error失败时取得错误信息

Index索引

MatchCount取得与检索条件相一致的字符串数量

MatchIndex设定与检索条件相一致的字符串的索引

MatchLength取得与检索条件相一致的字符串长度

MatchStart取得与检索条件相一致的字符串起始位置

MatchString取得与检索条件相一致的字符串

Name

Object

Parent

Pattern设定检索条件

Replace设定置换字符串

Soundex取得代表当前检索字符的声音代码

Tag

TagCount取得与检索条件相一致的标签数量

TagIndex在多个标签情况下,设定/取得与检索条件相一致的标签索引

TagLength取得与检索条件相一致的标签长度

TagStart取得与检索条件相一致的标签起始位置

TagString取得与检索条件相一致的标签的字符串

Text设定成为检索对象

Version取得FlexString的版本号

--------------------------------------------------------

MSFlexGrid与VSFlexGrid的单元格合并例子:

PrivateSubForm_Load()

DimiAsLong

Withfg

.WordWrap=True

.Rows=6

.Cols=6

.FixedRows=2

.FixedCols=0

.ColWidth(0)=1500

.RowHeight(0)=300

.RowHeight(1)=300

.TextMatrix(1,1)="进货"

.TextMatrix(1,2)="销售"

.TextMatrix(1,3)="退货"

.TextMatrix(1,4)="结存"

Fori=1To.Rows-1

.RowHeight(i)=300'设置行高

Nexti

Fori=0To1

.TextMatrix(i,0)="上月"&vbCrLf&"结存数量"'//换行

.FixedAlignment(0)=4

Nexti

Fori=0To1

.TextMatrix(i,5)="月末结存"

.FixedAlignment(5)=4

Nexti

Fori=1To4

.TextMatrix(0,i)="本月进销存数量"

.ColAlignment(i)=4

Nexti

.MergeCells=flexMergeFree

'.MergeCells=flexMergeFixedOnly

.MergeCol(0)=True

.MergeRow(0)=True

.MergeCol(5)=True

EndWith

EndSub

请问:如何使用VSFlexGridPro分级显示和存取数据库中的数据。类似于《让TreeView支持无限级分类》帖子中所介绍的使用树形控件显示和存取数据库的数据。

DimcnasNewADODB.Recordset

DimrsAsNewADODB.Recordset

DimlngYAsLong

DimintTAsInteger

cn.open"............"

rs.Open"select系统编号fromtestorderby系统编号",cn

WithVSFlexGrid1

Set.DataSource=rs

.RowOutlineLevel(1)=1

.IsSubtotal(1)=True

ForlngY=1To.Rows-1

intT=Len(.TextMatrix(lngY,0))-Len(Replace(.TextMatrix(lngY,0),".",""))

.RowOutlineLevel(lngY)=intT

.IsSubtotal(lngY)=True

Next

.OutlineCol=0

.OutlineBar=flexOutlineBarSimpleLeaf

EndWith

SetVSFlexGrid1.DataSource=Rs'这一步一定要有,

WithVSFlexGrid1

.DataRefresh

.Sort=flexSortGenericDescending'排序

EndWith

阴部潮湿吃什么药来调理呢
宝宝晚上睡觉咳嗽
腹胀的治疗方法
严重动脉硬化怎么治疗