1.如何用VB6.0制作Windows资源管理器
2.vb连接数据库sqlserver的问题
3.å¨VBä¸ Call代表ä»ä¹
4.vb 让å
¶å®FORMå¾å°ç¦ç¹
如何用VB6.0制作Windows资源管理器
用1个lisview 1个TREEVIEW 1个IMAGELIST 就可以了,TREEVIEW是显示树形结构的,IMAGELIST是存图标的,LISTVIEW可以有4种图标显示方法,可以做出资源管理器的效果,
listview用法:
通过此控件,秒余额源码miaoyuev可将项目组成带有或不带有列标头的列,并显示伴随的图标和文本。ListView控件是由ColumnHeader和ListItem对象所组成的,其中ColumnHeader对象的个数决定了控件的列数,而ListItem对象的个数则决定了控件的行数。(图7)
ColumnHeader对象是ListView控件中包含标头文字的项目。利用ColumnHeader对象,用户可以:
▲单击对象触发ColumnClick事件并根据数据项目将项目排序。
▲拖动对象的右边框来调整列宽度。
▲在报表视图中隐藏ColumnHeader对象。
ColumnHeader对象的数目决定每个ListItem对象可包含的子项目数目。删除ColumnHeader对象后所有与列关联的子项目也将被删除,并且每个ListItem对象的子项目数组将平移以更新ColumnHeader的索引,而这将导致剩余的列标头SubItemIndex属性的改变。
ColumnHeader对象的SubItemIndex属性
该属性返回与ListView控件中ColumnHeader对象关联的子项目的索引。子项目是字符串数组,代表显示在报表视图中的ListItem对象的数据。第一列的列标头SubItemIndex属性设置为0,这是因为小图标和ListItem对象的文字总出现在第一列中,而且它们被当作ListItem对象而不是子项目。列标头数目取决于子项目数目。列标头数目总是比子项目数目多1。
在设计时可以利用属性页的“列首”选项卡将ColumnHeader对象添加到ListView控件中,在运行时则用Add方法添加。
ColumnHeader对象的Add方法
该方法的使用与前面那些控件基本相似,就不再介绍了。
ListView1.ColumnHeader.Add(index,key,text,width,alignment)
ListItem对象是指控件中的一行(不包含标头行)的所有内容。它也可包含文本和,但是要使用则必须通过Icons和SmallIcons属性引用ImageList控件。
ListItem对象的SubItems属性
返回或设置一个字符串(子项目)数组,它代表ListView控件中ListItem对象的源码泄漏怎么补救数据。
ListItem对象可包含任意多个的关联项目数据字符串(子项目),但每个ListItem对象子项目数目必须相同。每个子项目都对应于相关的列标头,无法直接向子项目数组添加元素,只有通过ColumnHeaders的Add方法添加列标头的方法来添加子项目。
ListItem对象的Add方法
该方法添加ListItem对象到ListView控件的ListItems集合中并返回对新创建对象的引用。
它的语法如下:
ListItem1.Add(index,key,text,icon,smallIcon)
ListView控件的View属性
ListView控件可使用四种不同视图显示项目,这可以用View属性来确定。该属性返回或设置ListView控件中ListItem对象的外观。
ListView控件的SortOrder,SortKey和Sorted属性
控件中的ListItem对象可以按要求进行排序,与排序有关的属性是SortOrder,Sorted和SortKey属性。
SortOrder属性返回或设置一个值,此值决定ListView控件中的ListItem对象以升序或降序排序。
SortKey属性返回或设置一个值,此值决定ListView控件中的ListItem对象如何排序。
Sorted属性返回或设置确定ListView控件中的ListItem对象是否排序的值。
下面的代码说明了如何创建ColumnHeaders和ListItem对象,SubItemIndex和SubItem属性的使用方法以及如何排序。
Private Sub Form_load()
'确保ListView控件的view属性为报表视图。
ListView1.View=lvwReport
'添加三列。
ListView1.ColumnHeaders.Add,"Name","姓名"
ListView1.ColumnHeaders.Add,"Sex","性别"
ListView1.ColumnHeaders.Add,"Age","年龄"
'向控件添加ListItem对象。
Dim itmX As ListItem
'添加column1的名称。
Set itmX=ListView1.ListItems.Add(1,"ZL","张力")
'使用SubItemIndex将SubItem与正确的ColumnHeader关联。使用关键字("Sex")指定正确的ColumnHeader。
itmX.SubItems(ListView1.ColumnHeaders("Sex").SubItemIndex)="男"
'使用ColumnHeader关键字将SubItems字符串与
'正确的ColumnHeader关联。
itmX.SubItems(ListView1.ColumnHeaders("Age").SubItemIndex)=""
Set itmX=ListView1.ListItems.Add(1,"LF","李芳")
itmX.SubItems(ListView1.ColumnHeaders("Sex").SubItemIndex)="男"
itmX.SubItems(ListView1.ColumnHeaders("Age").SubItemIndex)=""
Set itmX=ListView1.ListItems.Add(1,"WW","王伟")
itmX.SubItems(ListView1.ColumnHeaders("Sex").SubItemIndex)="男"
itmX.SubItems(ListView1.ColumnHeaders("Age").SubItemIndex)=""
End Sub
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As ComctlLib.ColumnHeader)
Select Case ColumnHeader.Key
Case "Sex":ListView1.SortKey=1
ListView1.SortOrder=lvwAscending
ListView1.Sorted=True
Case "Age":ListView1.SortKey=2
ListView1.SortOrder=lvwAscending
ListView1.Sorted=True
End Select
End Sub
七、带刻度滑块---Slider
Slider控件是一个包含滑块和可选择性刻度标记的窗口,可以通过拖动滑块,用鼠标单击滑块的任意一侧或者使用键盘移动滑块来选择一个值。
在选择离散数值或某个范围内的一组连续数值时,Slider控件十分有用。例如,无需键入数字,通过将滑块移动到刻度标记处,java中vector源码可以用Slider控件来输入数值。
Silder控件的大多数基本属性比较简单,我们这里重点介绍一些较有用而又常易忽略的属性。
TickStyle属性
该属性返回或设置Slider控件上显示的刻度标记的样式。
SelectRange,SelStart和SelLength属性
Slider控件可以选择某个范围内的数值,这就要用到SelectRange,SelStart和SelLength属性。
SelectRange属性决定Slider控件是否可以选择一个范围。如果SelectRange属性为True,SelStart为选定范围的起始值,SelLength为选定范围的长度。
如果SelectRange属性为False,则SelStart属性的设置值与&#alue属性的设置值相同,SelLength属性无效。
下列代码允许在按住SHIFT键时,用鼠标拖动或单击Slider控件以选择一个范围。
Private Sub Form_Load()
'设置slider控件的设置值
Slider1.Max=
End Sub
Private Sub Slider1_MouseDown(Button As Integer,Shift As Integer,x As Single,y As Single)
If Shift=1 Then '如果按住Shift键,则Slider1.SelectRange=True '打开SelectRange。
Slider1.SelStart=Slider1.&#alue'设置SelStart数值
Slider1.SelLength=0'设置先前的SelLength(如存在)为0。
End If
End Sub
Private Sub Slider1_MouseUp(Button As Integer,Shift As Integer,x As Single,y As Single)
if Shift=1 Then
'如果在一点决定返回上一步,将发生错误。
On Error Resume Next
'否则使用SelStart和当前数值设置SelLength。
Slider1.SelLength=Slider1.&#alue-Slider1.SelStart
Else
Slider1.SelectRange=False'如果松开SHIFT键。
End If
End Sub
在程序中,常用Slider控件来代替键盘输入数字,如下面的例子。
该例通过Slider控件来显示不同的长度。
Private Sub Form_Load()
Slider1.Min=0
Slider1.Max=
Slider1.SmallChange=1
Slider1.LargeChange=
Slider1.TickFrequency=5
End Sub
Private Sub Slider1_Change()
Label1.Caption="长度是"&Format(Slider1.&#alue/5,"#.")&"厘米"
End Sub
==================
一、ListView使用简介
ListView控件是VB开发者非常喜爱的控件之一。作 为Windows公共控件组(COMCTL.OCX)的成员,它经常与经常与TreeView、ImageList等控 件联合使用。即用TreeView显示一个的树型结构,而用ListView显示选中的节点(Node)对 象的记录集。
这是笔者在开发财务软件项目中的<<凭证管理>> 模块的一个用户界面。屏幕左边是android高德源码一个TreeView控件,用来显示会计凭证的类别;右边是一 个ListView,用来显示对应类别的凭证目录;上方是一个菜单条控件(MenuBar)和一个工具 条控件(ToolBar);下方是一个状态栏控件(StatusBar),用来显示凭证数个当前日期。
大家可以看到图中所示的界面非常类似于Window/ 的资源浏览器,Windows的界面风格做为一种标准已为广大用户所接受。而Windows操作系 统的主要的优点就是为所有的应用程序提供了公用的界面。知道如何使用基于Windows的 应用程序的用户,很容易学会使用其他应用程序。
这种使用Windows公共控件组合的方法能够达 到与Windows界面的一致性,所以在目前VB5.0应用程序的开发中经常使用。
二、填充大量结果集所遇到的问题
在实际应用开发中,经常用ListView填充一个数据库 结果集(Record set)的内容。即先写一段SQL查询语句,产生一个结果集,然后将结果集的每一 条记录用DO...LOOP循环语句中填到ListView中。
但是当结果集很大时(例如有条以上的记录) ,填充所需要的时间会很长。用户不得不等很长时间完成一个查询。所以在查询的过程中 必须允许用户按Escape键退出。具体做法是在DO...LOOP循环体中加一条DoEvents函数,并 写一段中断退出程序代码。
DoEvents函数的功能是:转让控制权,以便让操 作系统处理其它的事件。这样在长时间的查询过程中,如果用户按了Escape键,将退出循环 体,结束查询过程。
但是这样又会引发另外一个问题:由于DoEvents 可以让操作系统响应别的事件,循环体中填充每一条ListView项目(ListItem)的过程也会 显示出来,所以在填充的过程中屏幕会不停的闪动,这种现象当然不能被用户所接受。如何 解决这个问题呢?
三、解决方案
用WindowsAPI函数可以解决这个问题。首先对几个 用到的API函数做一解释和说明。
1.GetClientRect Lib "user" (ByVal hwnd As Long, lpRect As RECT) As Long
此函数的功能是获得一个指定对象窗口(Window) 的矩型框区域(rectangle)。
Hwnd为指定对象或窗体的mac源码怎么用句柄。LpRect为返回矩 型框的结构(必须定义为结构类型的变量)。
2.ValidateRect Lib "user" (ByVal hwnd As Long, lpRect As RECT) As Long
此函数的功能是使指定的矩型区域生效。这样会 通知Windows不必对指定的区域进行重画(Redraw)。
3.InvalidateRect Lib "user" (ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long) As Long
此函数的功能是使指定的矩型区域无效。这样会 通知Windows要对指定的区域进行重画。
具体实现的步骤如下:
1.在填充结果集之前先用GetClientRect函数获 得ListView的显示区域。
2.在增加完一个显示项目(ListItem)后用ValidateRect 函数置这一区域为有效。这样Windows就不会显示每一条ListItem,屏幕闪动的现象就会消 失。
3.在填充结果集之后,用InvalidateRect函数置 这一区域为无效。这样Windows就会重画ListView的内容,结果集被完整的显示出来。
下面是笔者在项目开发中的一个程序实例。程序 名为FillListView。该程序将填写一个Access数据库(FISCAL.MDB)的凭证表(Table)的内 容到ListView中。
首先进入VB5.0,新建一个窗体(Form),名为Form1。
然后在Form中增加下列控件。
控 件 名 Name
ListView Lvw
Imagelist imlList
Command Button。 Command1
将ImageList控件中充填一个名为“item”的图象后 与ListView控件关联。
在<<工程>>菜单命令条中进入“引用”对话框,选 择“MicrosoftDAOObjectLibrary”
在Form的通用模块(Modle)中定义以下变量。
Private Type RECT ' 用 来 定 义 一 个 区 域 的 坐 标。
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
' - -
' Windows API 函 数 的 声 明。
Private Declare Function InvalidateRect Lib "user"
(ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long) As Long
Private Declare Function ValidateRect Lib "user"
(ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function GetClientRect Lib "user"
(ByVal hwnd As Long, lpRect As RECT) As Long
Dim mbSearchCancel As Boolean
' 用 来 定 义 查 询 中 断 的 标 志。
' True 表 示 中 止 查 询;False 表 示 正 在 查 询。
将 该Form 的KeyPreview 属 性 设 为True, 以 控 制 窗 体 接 收 键 盘 事 件。
然 后 在Form 的KeyPress 事 件 中 写 下 列 代 码:
If KeyAscii = vbKeyEscape Then
mbSearchCancel = True
' 当 用 户 按Escape 键 时, 置mbSearchCancel 变 量 为True。
End If
' 表 示 结 束 查 询。
在Command Button 的 Click 事 件 中 调 用 填 充 子 程 序:Call FillListView。
子 程 序 的 代 码 为:
Private Sub FillListView()
'
Dim itmX As ListItem ' 定 义 一 个ListView 的 显 示 项 目。
Dim sSQL As String ' 查 询 字 串 变 量 。
'
Dim rc As RECT ' ListView 的 显 示 区 域。
Dim wrkJet As Workspace ' 数 据 库 工 作 空 间。
Dim dbFISCAL As Database ' 数 据 库 对 象。
Dim RS As Recordset ' 数 据 结 果 集。
On Error GoTo ErrFillListView
Screen.MousePointer = vbHourglass
lvw.ListItems.Clear: ' 清 除ListView 的 内 容。
'
' 定 义ListView 的 列 头 的 名 称。
With lvw.ColumnHeaders
.Add , , " 凭 证 编 号",
.Add , , " 凭 证 日 期",
.Add , , " 凭 证 字 号",
.Add , , " 凭 证 类 别",
.Add , , " 首 行 摘 要",
.Add , , " 借 方 金 额 合 计", , lvwColumnRight
End With
' - - -
' 产 生 查 询 语 句。
sSQL = "select voucher_id,voucher_number,voucher_date,voucher_type_shortname,"
sSQL=sSQL&"voucher_type_name,voucher_memo,voucher_amount from VOUCHER"
sSQL = sSQL & "order by voucher_number"
' ' - - -
' 打 开 一 个 数 据 库 结 果 集。
Set wrkJet = CreateWorkspace("NewJetWorkspace", "admin", "", dbUseJet)
Set dbFISCAL = wrkJet.OpenDatabase("FISCAL.mdb")
Set RS=. dbFISCAL .Open sSQL,dbOpenForwardOnly
'
' 获 得listview 的 显 示 区 域。
Call GetClientRect(lvw.hwnd, rc)
Do While Not RS.EOF()
DoEvents
If mbSearchCancel Then
' 中 断 退 出
RS.Close: Set RS = Nothing ' 关 闭、 清 除 结 果 集。
mbSearchCancel = False
Screen.MousePointer = vbDefault
' - -
' 刷 新ListView 的 内 容, 显 示 已 经 查 出 的 记 录 数。
Call InvalidateRect(lvw.hwnd, rc, True)
Exit Sub
End If
' - - -
' 增 加 一 个 显 示 项 目ListItem。
With lvw.ListItems
Set itmX = .Add(, , "" & RS!voucher_number, "item", "item")
' 凭 证 编 号
itmX.SubItems(1) = Format$("" & RS!voucher_date, "yyyy/mm/dd")
' 凭 证 日 期
itmX.SubItems(2) = "" & RS!voucher_type_shortname & "-" —
' 凭 证 字 号
& "" & RS!voucher_number
itmX.SubItems(3)="" & RS!voucher_type_name
' 凭 证 类 别
itmX.SubItems(4)=""&RS!voucher_memo
' 首 行 摘 要
itmX.SubItems(5)= Format$("" & RS!voucher_amount, "#,###.")
' 借 方 合 计 金 额
itmX.Tag = "" & RS!voucher_id
End With
' - -
' 避 免 显 示 区 域 的 闪 动 现 象。
Call ValidateRect(lvw.hwnd, rc)
RS.MoveNext
Loop
'
'- 刷 新ListView 的 内 容。 显 示 所 有 查 出 的 记 录 数。
Call InvalidateRect(lvw.hwnd, rc, True)
' -
' 关 闭、 清 除 结 果 集。
RS.Close: Set RS = Nothing
creen.MousePointer = vbDefault
Exit Sub
ErrFillListView:
Screen.MousePointer = vbDefault
MsgBox Err & ":" & Error, vbInformation, Me.Caption
Exit Sub
End Sub
listview 是VB中经常用到的控件。下面说一下其使用。代码如下:
ListView1.ColumnHeaders.Add , "name", "Name", '定义列头
ListView1.ColumnHeaders.Add , "age", "Age",
ListView1.ColumnHeaders.Add , "position", "Position",
ListView1.ColumnHeaders.Add , "addr", "Home addr",
ListView1.ColumnHeaders.Add , "other", "Other",
Set itmX = ListView1.ListItems.Add(, "a", "abcd") '添加一列并设置对象itmX为listitem.
itmX.SubItems(1) = "" '在单元格里添加内容.
itmX.SubItems(2) = ""
双击事件
Private Sub ListView1_DblClick()
If Me.ListView1.SelectedItem Is Nothing Then
Exit Sub
End If
Dim Item As ListItem
Set Item = Me.ListView1.SelectedItem
MsgBox Item.Text '显示被双击的条目的text
End Sub
treeview用法:
Treeview 控件:名称 Treeview1;
Imagelist 控件:名称 Imagelist1,并在该控件中放置三张个性(×),建立索引1、2、3;(方法:在Imagelist 控件上单击鼠标右键选择属性)
Label 控件:名称分别为Lab(0)、Lab(1),Caption分别为“父节点:”、“子节点:”;
Textbox 控件:名称分别为Txt(0)、Txt(1),text都为“”;
commandbutton 控件:名称为系统默认,Caption分别为“添加”、“展开”、“收起”、“排序”、“删除”、“退出”;
将下列代码加入到代码框:
Option Explicit
Dim I As Integer
Dim J As Integer
Dim nodx As Node
Dim CunZai As Boolean '定义变量
Private Sub Command1_Click()
If Txt(0).Text <> "" And Txt(1).Text <> "" Then '不允许建立零字节的父节点和子节点
CunZai = False
J = TreeView1.Nodes.Count
For I = 1 To TreeView1.Nodes.Count '检查新输入的父节点名称是否存在
If TreeView1.SelectedItem.Children > 0 Then
If Txt(0).Text = TreeView1.Nodes(I).Text Then CunZai = True
End If
Next I
If CunZai = True Then '若存在, 则在父节点下建立子节点
Set nodx = TreeView1.Nodes.Add(Txt(0).Text, tvwChild, "child" & J,
Txt(1).Text, 3)
Else ,若不存在,则建立父节点和子节点
Set nodx = TreeView1.Nodes.Add(, , Txt(0).Text, Txt(0).Text, 1)
Set nodx = TreeView1.Nodes.Add(Txt(0).Text, tvwChild, "child" & J,_
Txt(1).Text, 3)
End If
TreeView1.Refresh
ElseIf Txt(0).Text = "" Then MsgBox "请输入父节点名称!", vbInformation, "警告!"
'系统提示
ElseIf Txt(1).Text = "" Then MsgBox "请输入子节点名称!", vbInformation, "警告!"
End If
End Sub
Private Sub Command2_Click()
For I = 1 To TreeView1.Nodes.Count
TreeView1.Nodes(I).Expanded = True '展开所有节点
Next I
End Sub
Private Sub Command3_Click()
For I = 1 To TreeView1.Nodes.Count
TreeView1.Nodes(I).Expanded = False '收起所有节点
Next I
End Sub
Private Sub Command4_Click()
TreeView1.Sorted = True '排列顺序
End Sub
Private Sub Command5_Click()
If TreeView1.SelectedItem.Index <> 1 Then
TreeView1.Nodes.Remove TreeView1.SelectedItem.Index '删除选定的节点
End If
End Sub
Private Sub Command6_Click()
End '退出程序
End Sub
Private Sub Form_Load()
TreeView1.LineStyle =TvwTreeLines '在兄弟节点和父节点之间显示线
TreeView1.ImageList = ImageList1 '链接图像列
TreeView1.Style = tvwTreelinesPlusMinusPictureText
'树状外观包含全部元素
Set nodx = TreeView1.Nodes.Add(, , "蒲子明", "蒲子明", 1)
'建立名称为"蒲子明"的父节点,选择索引为1的图像
Set nodx = TreeView1.Nodes.Add("蒲子明", tvwChild, "child", "收件箱", 3)
'在"蒲子明"父节点下建立"收件箱"子节点,选择索引为3的图像
Set nodx = TreeView1.Nodes.Add("蒲子明", tvwChild, "child", "发件箱", 3)
'在"蒲子明"父节点下建立"发件箱"子节点,选择索引为3的图像
CunZai = False
End Sub
Private Sub TreeView1_Expand(ByVal Node As MSComctlLib.Node)
Node.ExpandedImage = 2 '节点被展开时,选择索引为2的图像
End Sub
Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
If TreeView1.SelectedItem.Children = 0 Then '检查是否有子节点,0为无
For I = 1 To TreeView1.Nodes.Count
If TreeView1.Nodes(I).Selected Then
MsgBox "您选择的是:“" & TreeView1.Nodes(I).FullPath & "”子节点!"
'系统提示
End If
Next I
End If
告诉你用法你得自己写代码才有编程的乐趣不是吗?
vb连接数据库sqlserver的问题
/candcsharp/blog/item/eddecdbf1aaa.html
(三)用代码实现数据绑定
上面我们着重探讨了控件与数集据绑定的向导模式。这种模式虽然实现方法简单,但是却不灵活,可移植性较差。为此,我们为大家介绍如何用代码来实现数据绑定。用代码实现数据绑定的优点在于灵活自由,代码移植方便。
为了便于更好的理解,我们仍然选用“TextBox”控件作为实例来介绍。
1.绑定到TextBox控件
(1)界面设计:
新建一个项目,按照图的方法设置程序界面,再增加一个Button控件,将其“Text“属性设为“TextBox数据绑定”。
(2)代码实现:
'指定程序中引用的名称空间:在代码窗中输入:
Imports System.Drawing
Imports System.Windows.Forms
Imports System.ComponentModel
Imports System
Imports System.Data.OleDb
Imports System.Data
'首先定义全局变量myDataSet及GetConnected()方法,代码如下:
Public Class Form1
Inherits Form
Private WithEvents Button1 As Button
Private TextBox1 As TextBox
……(省略部分自动生成代码)
Private myDataSet As DataSet
Private components As System.ComponentModel.Container
Public Sub New()
MyBase.New()
GetConnected() '这个过程是用于建立连接,打开数据库
InitializeComponent()
End Sub
'清除在程序中使用过的资源
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
……(省略部分自动生成代码)
End Sub
'
'为GetConnected()方法增加代码,用来打开数据表,返回数据集。
Public Sub GetConnected()
'创建一个 OleDbConnection
Dim ConnectionString As String = 〃 Provider = Microsoft.Jet.OLEDB.4.0; Data Source = e:\My Documents\db1.mdb〃
Dim myConn As OleDbConnection = New OleDbConnection()
myConn.ConnectionString = ConnectionString
Dim strCom As String = 〃 SELECT * FROM student 〃
'创建一个 DataSet
myDataSet = New DataSet()
myConn.Open()
'用 OleDbDataAdapter 得到一个数据集
Dim myCommand As OleDbDataAdapter = New OleDbDataAdapter(strCom, myConn)
'把Dataset绑定student数据表
myCommand.Fill(myDataSet, 〃student〃)
'关闭此OleDbConnection
myConn.Close()
End Sub
'初始化窗体中的组件
Private Sub InitializeComponent()
……(省略部分自动生成代码)
End Sub
'将各个文本框控件绑定到数据库的各个字段。
Private Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Button1.Click
TxtStuID.DataBindings.Add(New Binding(〃Text〃, Me.myDataSet, 〃student.StuID〃))
TxtStuName.DataBindings.Add(New Binding(〃Text〃, Me.myDataSet, 〃student.StuName〃))
TxtStuSex.DataBindings.Add(New Binding(〃Text〃, Me.myDataSet, 〃student.StuSex〃))
TxtStuBorn.DataBindings.Add(New Binding(〃Text〃, Me.myDataSet, 〃student.StuBorn〃))
TxtStuCore.DataBindings.Add(New Binding(〃Text〃, Me.myDataSet, 〃student.StuCore〃))
End Sub
End Class
Module Module1
Sub Main()
Application.Run(New Form1())
End SubEnd Module
编译后运行程序,看看是不是与上面介绍的实例运行结果相同。
在上面的代码中,我们新建了一个GetConnected()过程,用于建立连接,打开数据库。在用代码实现数据绑定或者对数据库进行任何操作前,就必须要先建立连接,打开数据库,程序运行结束后再关闭数据连接。
在Button1_Click过程中,我们把“TextBox”控件绑定到数据集myDataSet中“student”的各个字段上。
程序运行后,点击“TextBox数据绑定”按纽,程序就会用myDataSet中“student”中的数据来自动填充文本框。
2.绑定到Label控件
有了上面的内容做基础,再来讨论如何把数据集绑定到Label控件上就显得很简单了。把数据绑定到Label控件的方法与绑定到TextBox控件的方法大同小异。此处不再详细讲解,只给出代码实现绑定到Label控件的核心部分代码。
Private Sub Button1_Click (ByVal sender As Object , _
ByVal e As System.EventArgs ) Handles Button1.Click
'把student表的StuName字段绑定到Label1的Text属性上。
Label1.DataBindings.Add ( New Binding ( 〃Text〃 , Me.myDataSet , 〃student.StuName〃 ) )
End Sub
3.绑定到ComboBox控件
上面介绍的是对组件的简单数据绑定,对组件的复杂数据绑定和它有所区别,也有所相同,具体如下:
(1)要对ComboBox组件实现数据绑定,首先也是要打开数据表,得到数据集。这和上面TextBox组件的代码大致一样,在此略过。
(2)实现数据绑定:
设定了ComboBox组件的三个属性就可以实现数据绑定了,这三个属性是“DataSource”、“DisplayMember”、“ValueMember”。其中DataSource表示指定的数据集;DisplayMember表示ComboBox组件显示的字段值;ValueMember表示ComboBox组件选择后的值。这三个属性的具体使用方法如下:
ComboBox1.DataSource = Me.myDataSet
ComboBox1.DisplayMember = 〃studnet.StuName〃
ComboBox1.ValueMember = 〃 studnet.StuName 〃
下面我们就来看看把数据集绑定到ComboBox控件的核心代码:
Private Sub Button1_Click ( ByVal sender As Object , _
ByVal e As System.EventArgs ) Handles Button1.Click
ComboBox1.DataSource = Me.myDataSet
ComboBox1.DisplayMember = 〃student.StuName〃
ComboBox1.ValueMember = 〃 student.StuName 〃
End Sub
注意:对ComboBox控件进行数据绑定的方法同样适用于ListBox控件,因此关于LisBox控件数据绑定方法本文将不再介绍。需要者请参阅ComboBox相关内容。
三、数据库简单操作
前面介绍了ADO.NET基础,以及ADO.NET与Windows窗体控件的绑定方法。但是,对于数据库编程我们更想了解的还是如何增加记录,删除记录,更新记录等数据库记录的操作方法。这里我们将以一个具体的实例为大家介绍这些操作方法。
在图3中,有btnFirst(第一个记录),btnEnd(最后一条记录),btnAdd(增加记录),btnDel(删除记录),btnEdit(修改记录)控件。
用代码形式打开数据并在frmtest_load中把数据绑定给TextBox控件。此处给出源代码:
'打开数据库
Public Sub OpenData()
'创建一个 OleDbConnection
Dim ConnectionString As String = 〃 Provider = Microsoft.Jet.OLEDB.4.0; Data Source = e:\My Documents\db1.mdb〃
Dim myConn As OleDbConnection = New OleDbConnection()
myConn.ConnectionString = ConnectionString
Dim strCom As String = 〃 SELECT * FROM student 〃
'创建一个 DataSet
myDataSet = New DataSet()
myConn.Open()
'用 OleDbDataAdapter 得到一个数据集
Dim myCommand As OleDbDataAdapter = New OleDbDataAdapter(strCom, myConn)
'把Dataset绑定student数据表
myCommand.Fill(myDataSet, 〃student〃)
'关闭此OleDbConnection
myConn.Close()
End Sub
'绑定数据到TextBox控件
Private Sub frmtest_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
txtStuID.DataBindings.Add(New Binding(〃Text〃, Me.myDataSet, 〃student.StuID〃))
txtStuName.DataBindings.Add(New Binding(〃Text〃, Me.myDataSet, 〃student.StuName〃))
txtStuSex.DataBindings.Add(New Binding(〃Text〃, Me.myDataSet, 〃student.StuSex〃))
txtStuBorn.DataBindings.Add(New Binding(〃Text〃, Me.myDataSet, 〃student.StuBorn〃))
txtStuCore.DataBindings.Add(New Binding(〃Text〃, Me.myDataSet, 〃student.StuCore〃))
End Sub
完成以上步骤后,我们就可以通过编程对数据库进行各作操作了。
1.实现对数据记录的浏览
在完成对窗体中的WinForm组件进行绑定后,实现对数据记录的浏览操作的关键就是要找到如何定位数据记录指针的方法。而要实现这种处理就需要用到.NET FrameWork SDK中的名称空间System.Windows.Froms中的BindingManagerBase类。
BindingManagerBase是一个抽象的类,主要用于管理同一数据表所有绑定对象。BindingManagerBase类中定义了二个属性“position”和“Count”,第一个属性是定义当前数据指针,而第二个属性主要是得到当前数据集有多少记录数目。在已经进行完数据绑定后,通过这两个属性配合使用,实现对数据记录的浏览。
(1)向上翻阅一条记录:
双击“上一条”按钮,在代码窗中输入以下代码:
Private Sub btnPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrevious_.Click
Me.BindingContext(myDataSet, 〃student〃).Position -= 1
End Sub
(2)向下翻阅一条记录:
双击“下一条”按钮在代码窗中输入以下代码:
Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesbtnNext.Click
Me.BindingContext(myDataSet, 〃student〃).Position += 1
End Sub
(3)翻到最后一条记录:
双击“最后一条记录”按钮,在代码窗中输入以下代码:
Private Sub btnEnd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnd.Click
Me.BindingContext(myDataSet, 〃student〃).Position = Me.BindingContext(myDataSet, 〃student〃).Count - 1
End Sub
(4)翻阅到第一条记录:
双击“第一条记录”按钮,在代码窗中输入以下代码:
Private Sub btnFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFirst.Click
Me.BindingContext(myDataSet, 〃student〃).Position = 0
End Sub
说明:为了代码书写方便,我们可以先定义一个BindingManagerBase对象myBind,如myBind = Me.BindingContext (myDataSet, 〃student〃 ),于是以上各句代码均可以简写成:
向上翻阅一条记录:myBind.Position = myBind.Position - 1
向下翻阅一条记录:myBind.Position = myBind.Position + 1
翻阅到最后一条记录:myBind.Position=myBind.count - 1
翻阅到第一条记录:myBind.Position = 0
2.删除数据记录
双击“删除记录”按钮,在代码窗中输入以下代码:
Private Sub btnDel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDel.Click
Dim ConnectionString As String = 〃 Provider = Microsoft.Jet.OLEDB.4.0; Data Source = e:\My Documents\db1.mdb〃
Dim myConn As OleDbConnection = New OleDbConnection()
myConn.ConnectionString = ConnectionString
myConn.Open()
Dim strDele As String = 〃DELETE From student WHERE StuID = '〃 + txtStuID.Text + 〃 '〃
Dim myCommand As OleDbCommand = New OleDbCommand(strDele, myConn)
myCommand.ExecuteNonQuery() myDataSet.Tables(〃student〃).Rows(Me.BindingContext(myDataSet, 〃student〃).Position).Delete()
myDataSet.Tables(〃student〃).AcceptChanges()
.myConn.Close()
End Sub
前面四行代码我们已经非常熟悉,目的是建立与数据据的连接并打开数据库。第6行代码我们建立一个SQL查询,用来查询数据表中StuID字段值等于TxtStuID.Text输入值的所有记录。并在第7行代码中将查询结果建立一个新的OleDbCommand对象,用来指定要删除的记录。第8行代码是从数据库中删除指定的记录,第9行代码是从myDataSet中删除记录。前者是物理上删除记录,如果去掉第8行代码运行程序你就会发现,记录只是在当前操作中被删除了,在数据库中依然存在。
其中第6行代码中定义的SQL查询条件读者可以根据需要自行指定。需要说明的是,由于我们在创建数据表时,指定StuID字段的类型为Text类型,因此在书写SQL语名时要在“=”号前加上单引号,具体格式请参照第6行代码。如果StuID字段类型为数字型,那么第6行正确写法应该为:
Dim strDele As String = 〃DELETE From student WHERE StuID = 〃 + txtStuID.Text
3.修改数据记录
修改数据的方法有很多,本文中我们将以采用SQL语言来修改数据记录为例详细介绍一下如何修改数据记录。下面我们先看看程序代码:
Dim ConnectionString As String = 〃 Provider = Microsoft.Jet.OLEDB.4.0; Data Source = e:\My Documents\db1.mdb〃
Dim myConn As OleDbConnection = New OleDbConnection()
myConn.ConnectionString = ConnectionString
myConn.Open()
'以上代码用来连接数据源
myDataSet.Tables(〃student〃).Rows(Me.BindingContext(myDataSet, 〃student〃).Position).BeginEdit()
'利用SQL语句创建数据更新集合
Dim StrUpdate As String = 〃Update student SET StuName='〃 + txtStuName.Text + 〃',StuSex='〃 + txtStuSex.Text + 〃',StuBorn='〃 + txtStuBorn.Text + 〃',StuCore='〃 + txtStuCore.Text + 〃' WHERE StuID='〃 + txtStuID.Text + 〃'〃
'利用SQL结果创建新的OleDbCommand对象
Dim myCommand As OleDbCommand = New OleDbCommand(StrUpdate, myConn)
myCommand.ExecuteNonQuery()
myDataSet.Tables(〃student〃).Rows(Me.BindingContext(myDataSet, 〃student〃).Position).EndEdit()
myDataSet.Tables(〃student〃).AcceptChanges()
myConn.Close()
MsgBox(〃数据修改完成!〃)
上述代码中我们采用SQL语言中的Update语名来更新记录,对各个TextBox中的值修改后更新到数据库。其中重要语句就是SQL语句的编写。如果你有不明白的地方,请参阅SQL相关资料。代码中我们同时还利用了BeginEdit()与EndEdit()方法,任何从数据的修改都必须在这两个方法之间进行。前者是数据修改的入口,后者则是完成将数据写入数据库的工作。
4.增加数据记录
增加数据记录与修改数据在实现方法上有很多相同之处。在下面的实例中我们利用SQL的Insert语句在指定位置插入一条记录,把更新到数据库。如果你想在数据表最后增加一条记录,只需要将数据记录指针指向数据表末尾就行了。
Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
Dim ConnectionString As String = 〃 Provider = Microsoft.Jet.OLEDB.4.0; Data Source = e:\My Documents\db1.mdb〃
Dim myConn As OleDbConnection = New OleDbConnection()
myConn.ConnectionString = ConnectionString
myConn.Open()
Dim StrAdd As String = 〃insert into student (Stuid,StuName,StuSex,StuBorn,StuCore) values('〃 + txtStuID.Text + 〃','〃 + txtStuName.Text + 〃','〃 + txtStuSex.Text + 〃','〃 + txtStuBorn.Text + 〃','〃 + txtStuCore.Text + 〃')〃
Debug.Write(StrAdd)
Dim myCommand As OleDbCommand = New OleDbCommand(StrAdd, myConn)
myCommand.ExecuteNonQuery()
myConn.Close()
myDataSet.Tables(〃student〃).Rows(Me.BindingContext(myDataSet, 〃student〃).Position).BeginEdit()
myDataSet.Tables(〃student〃).Rows(Me.BindingContext(myDataSet, 〃student〃).Position).EndEdit()
myDataSet.Tables(〃student〃).AcceptChanges()
MsgBox(〃数据增加完成!〃)
End Sub
有了前面几种基本操作方法的代码分析后,这段代码相信不难理解。大家需要关注的还是SQL语句是如何实现数据记录增加的。这种方法具有一定的通行性。
完成上述设计后我们来看看整个程序的运行结果。按下F5键运行程序即可。
本文中所有代码均在Windows XP+VB.NET环境下调试通过。
å¨VBä¸ Call代表ä»ä¹
callä¸æ¯å¿ é¡»è¦ç¨çï¼ä½æ¯callæ¯ç±å®åå¨çéççãä½ ç´æ¥æä¸ä¸ªå½æ°ååå¨é£è¾¹ï¼å¦æ代ç å¾å¤ï¼å¯è¯»æ§å°±ä¸æ¯å¾å¥½ï¼ç¸åï¼å¦æå¨åé¢å ä¸ä¸ä¸ªCallï¼é£ä¹å°±æä¸ç®äºç¶çæè§ï¼ç¥éç¥è¯è°ç¨çä¸ä¸ªå½æ°ï¼å¦æ没æï¼å¯è¯»æ§å°±ä¸æ¯å¾å¥½äºï¼åºå«ä¸»è¦å¨è¿éã
å¦å¤ï¼
ç¨Callçè¯æ³æ¯è¿æ ·åçï¼
[Call] name [argumentlist]é¨å æè¿°
Call å¯éåæ°ï¼å ³é®åãå¦ææå®äºè¿ä¸ªå ³é®åï¼å argumentlist å¿ é¡»å ä¸æ¬å·ï¼ä¾å¦ï¼
Call MyProc(0)
name å¿ è¦åæ°ï¼è¦è°ç¨çè¿ç¨å称ã
argumentlist
说æè°ç¨ä¸ä¸ªè¿ç¨æ¶ï¼å¹¶ä¸ä¸å®è¦ä½¿ç¨ Call å ³é®åãå¦æä½¿ç¨ Call å ³é®åæ¥è°ç¨ä¸ä¸ªéè¦åæ°çè¿ç¨ï¼argumentlist å°±å¿ é¡»è¦å ä¸æ¬å·ãå¦æçç¥äº Call å ³é®åï¼é£ä¹ä¹å¿ é¡»è¦çç¥ argumentlis å¤é¢çæ¬å·ãå¦æä½¿ç¨ Call è¯æ³æ¥è°ç¨å 建å½æ°æç¨æ·å®ä¹å½æ°ï¼åå½æ°çè¿åå¼å°è¢«ä¸¢å¼ãè¥è¦å°æ´ä¸ªæ°ç»ä¼ ç»ä¸ä¸ªè¿ç¨ï¼ä½¿ç¨æ°ç»åï¼ç¶åå¨æ°ç»ååå ä¸ç©ºæ¬å·ã
vb è®©å ¶å®FORMå¾å°ç¦ç¹
ä½ åæä¿®æ¹è¿é£è¡ï¼ä½ ä¹ä¸æ åºæ¥ï¼è°ä¼æ ¢æ ¢æ¾é¿ï¼
æ³è®©ä¸ä¸ªFormä¸çä¸ä¸ªæ§ä»¶å¾å°ç¦ç¹å¯ä»¥å æFormè°åºæ¥ï¼å³Showï¼ï¼æ¹æ³ã
ç¶å让æ§ä»¶è·åç¦ç¹å°±å¯ä»¥äºã