﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-IT小小鸟的学习日记-随笔分类-VB</title><link>http://www.cnitblog.com/lenatem/category/8224.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 13:40:37 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 13:40:37 GMT</pubDate><ttl>60</ttl><item><title>datagridview 操作详解</title><link>http://www.cnitblog.com/lenatem/archive/2009/07/27/60399.html</link><dc:creator>雅量</dc:creator><author>雅量</author><pubDate>Mon, 27 Jul 2009 13:12:00 GMT</pubDate><guid>http://www.cnitblog.com/lenatem/archive/2009/07/27/60399.html</guid><wfw:comment>http://www.cnitblog.com/lenatem/comments/60399.html</wfw:comment><comments>http://www.cnitblog.com/lenatem/archive/2009/07/27/60399.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lenatem/comments/commentRss/60399.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lenatem/services/trackbacks/60399.html</trackback:ping><description><![CDATA[<p>1、　取得或者修改当前单元格的内容 <br>2、 设定单元格只读 <br>3、　不显示最下面的新行 <br>4、　判断新增行 <br>5、　行的用户删除操作的自定义 <br>6、　行、列的隐藏和删除 <br>7、　禁止列或者行的Resize <br>8、　列宽和行高以及列头的高度和行头的宽度的自动调整 <br>9、　冻结列或行 <br>10、　列顺序的调整 <br>11、　行头列头的单元格 <br>12、　剪切板的操作 <br>13、　单元格的ToolTip的设置 <br>14、　右键菜单（ContextMenuStrip）的设置 <br>15、　单元格的边框、 网格线样式的设定 <br>16、　单元格表示值的设定 <br>17、　用户输入时，单元格输入值的设定 <br>18、　设定新加行的默认值 <br>--------------------------------------------------------------------------------<br>1、　DataGridView 取得或者修改当前单元格的内容： 当前单元格指的是 DataGridView 焦点所在的单元格，它可以通过 DataGridView 对象的 CurrentCell 属性取得。如果当前单元格不存在的时候，返回Nothing(C#是null) [VB.NET] ' 取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value) ' 取得当前单元格的列 Index Console.WriteLine(DataGridView1.CurrentCell.ColumnIndex) ' 取得当前单元格的行 Index Console.WriteLine(DataGridView1.CurrentCell.RowIndex) 另外，使用 DataGridView.CurrentCellAddress 属性（而不是直接访问单元格）来确定单元格所在的行：DataGridView.CurrentCellAddress.Y 和列： DataGridView.CurrentCellAddress.X 。这对于避免取消共享行的共享非常有用。 当前的单元格可以通过设定 DataGridView 对象的 CurrentCell 来改变。可以通过 CurrentCell 来设定 DataGridView 的激活单元格。将 CurrentCell 设为 Nothing(null) 可以取消激活的单元格。 [VB.NET] ' 设定 (0, 0) 为当前单元格 DataGridView1.CurrentCell = DataGridView1(0, 0) <br>--------------------------------------------------------------------------------<br>2、　DataGridView 设定单元格只读： <br>1） 使用 ReadOnly 属性 　如果希望，DataGridView 内所有单元格都不可编辑， 那么只要： [VB.NET] ' 设置 DataGridView1 为只读 DataGridView1.ReadOnly = True 　如果希望，DataGridView 内某个单元格不可编辑， 那么只要： [VB.NET] ' 设置 DataGridView1 的第2列整列单元格为只读 DataGridView1.Columns(1).ReadOnly = True ' 设置 DataGridView1 的第3行整行单元格为只读 DataGridView1.Rows(2).ReadOnly = True ' 设置 DataGridView1 的[0，0]单元格为只读 DataGridView1(0, 0).ReadOnly = True 2） 使用 EditMode 属性 DataGridView.EditMode 属性被设置为 DataGridViewEditMode.EditProgrammatically 时，用户就不能手动编辑单元格的内容了。但是可以通过程序，调用 DataGridView.BeginEdit 方法，使单元格进入编辑模式进行编辑。 [VB.NET] DataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically <br>3） 根据条件设定单元格的不可编辑状态 当一个一个的通过单元格坐标设定单元格 ReadOnly 属性的方法太麻烦的时候，你可以通过 CellBeginEdit 事件来取消单元格的编辑。 [VB.NET] 'CellBeginEdit 事件处理方法 Private Sub DataGridView1_CellBeginEdit(ByVal sender As Object, _ ByVal e As DataGridViewCellCancelEventArgs) _ Handles DataGridView1.CellBeginEdit Dim dgv As DataGridView = CType(sender, DataGridView) ' 是否可以进行编辑的条件检查 If dgv.Columns(e.ColumnIndex).Name = "Column1" AndAlso _ Not CBool(dgv("Column2", e.RowIndex).Value) Then ' 取消编辑 e.Cancel = True End If End Sub <br>-------------------------------------------------------------------------------- <br>3、　DataGridView 不显示最下面的新行： 通常 DataGridView 的最下面一行是用户新追加的行（行头显示 * ）。如果不想让用户新追加行即不想显示该新行，可以将 DataGridView 对象的 AllowUserToAddRows 属性设置为 False。 [VB.NET] ' 设置用户不能手动给 DataGridView1 添加新行 DataGridView1.AllowUserToAddRows = False 补足： 如果 DataGridView 的 DataSource 绑定的是 DataView, 还可以通过设置 DataView.AllowAdd 属性为 False 来达到同样的效果。 <br>-------------------------------------------------------------------------------- <br>4、　DataGridView 判断新增行： DataGridView的AllowUserToAddRows属性为True时也就是允许用户追加新行的场合下，DataGridView的最后一行就是新追加的行(*行)。使用 DataGridViewRow.IsNewRow 属性可以判断哪一行是新追加的行。另外，通过DataGridView.NewRowIndex 可以获取新行的行序列号。在没有新行的时候，NewRowIndex = -1。[VB.NET] If DataGridView1.CurrentRow.IsNewRow Then Console.WriteLine("当前行为新追加行。") Else Console.WriteLine("当前行不是新追加行。") End If -------------------------------------------------------------------------------- <br>5、　DataGridView 行的用户删除操作的自定义： <br>1） 无条件的限制行删除操作。 默认时，DataGridView 是允许用户进行行的删除操作的。如果设置 DataGridView对象的AllowUserToDeleteRows属性为 False 时， 用户的行删除操作就被禁止了。 [VB.NET] ' 禁止DataGridView1的行删除操作。 DataGridView1.AllowUserToDeleteRows = False 但是，通过 DataGridViewRowCollection.Remove 还是可以进行行的删除。 补足： 如果 DataGridView 绑定的是 DataView 的话，通过 DataView.AllowDelete 也可以控制行的删除。 <br>2） 行删除时的条件判断处理。 用户在删除行的时候，将会引发 DataGridView.UserDeletingRow 事件。 在这个事件里，可以判断条件并取消删除操作。 [VB.NET] ' DataGridView1 的 UserDeletingRow 事件 Private Sub DataGridView1_UserDeletingRow(ByVal sender As Object, _ ByVal e As DataGridViewRowCancelEventArgs) _ Handles DataGridView1.UserDeletingRow ' 删除前的用户确认。 If MessageBox.Show("确认要删除该行数据吗？", "删除确认", _ MessageBoxButtons.OKCancel, MessageBoxIcon.Question) &lt;&gt; _ Windows.Forms.DialogResult.OK Then ' 如果不是 OK，则取消。 e.Cancel = True End If End Sub <br>-------------------------------------------------------------------------------- <br>6、　DataGridView 行、列的隐藏和删除： <br>1） 行、列的隐藏 [VB.NET] ' DataGridView1的第一列隐藏 DataGridView1.Columns(0).Visible = False ' DataGridView1的第一行隐藏 DataGridView1.Rows(0).Visible = False <br>2） 行头、列头的隐藏 [VB.NET] ' 列头隐藏 DataGridView1.ColumnHeadersVisible = False ' 行头隐藏 DataGridView1.RowHeadersVisible = False <br>3） 行和列的删除 [VB.NET] ' 删除名为"Column1"的列 DataGridView1.Columns.Remove("Column1") ' 删除第一列 DataGridView1.Columns.RemoveAt(0) ' 删除第一行 DataGridView1.Rows.RemoveAt(0) <br>4） 删除选中行 [VB.NET] For Each r As DataGridViewRow In DataGridView1.SelectedRows If Not r.IsNewRow Then DataGridView1.Rows.Remove(r) End If Next <br>-------------------------------------------------------------------------------- <br>7、 DataGridView 禁止列或者行的Resize： <br>1） 禁止所有的列或者行的Resize [VB.NET] ' 禁止用户改变DataGridView1的所有列的列宽 DataGridView1.AllowUserToResizeColumns = False '禁止用户改变DataGridView1の所有行的行高 DataGridView1.AllowUserToResizeRows = False <br>2） 禁止指定行或者列的Resize [VB.NET] ' 禁止用户改变DataGridView1的第一列的列宽 DataGridView1.Columns(0).Resizable = DataGridViewTriState.False ' 禁止用户改变DataGridView1的第一列的行宽 DataGridView1.Rows(0).Resizable = DataGridViewTriState.False 关于 NoSet 当 Resizable 属性设为 DataGridViewTriState.NotSet 时， 实际上会默认以 DataGridView 的 AllowUserToResizeColumns 和 AllowUserToResizeRows 的属性值进行设定。比如： DataGridView.AllowUserToResizeColumns = False 且 Resizable 是 NoSet 设定时，Resizable = False 。 判断 Resizable 是否是继承设定了 DataGridView 的 AllowUserToResizeColumns 和 AllowUserToResizeRows 的属性值， 可以根据 State 属性判断。如果 State 属性含有 ResizableSet，那么说明没有继承设定。 <br>3） 列宽和行高的最小值的设定 [VB.NET] ' 第一列的最小列宽设定为 100 DataGridView1.Columns(0).MinimumWidth = 100 ' 第一行的最小行高设定为 50 DataGridView1.Rows(0).MinimumHeight = 50 <br>4) 禁止用户改变行头的宽度以及列头的高度 [VB.NET] ' 禁止用户改变列头的高度 DataGridView1.ColumnHeadersHeightSizeMode = _ DataGridViewColumnHeadersHeightSizeMode.DisableResizing ' 禁止用户改变行头的宽度 DataGridView1.RowHeadersWidthSizeMode = _ DataGridViewRowHeadersWidthSizeMode.EnableResizing <br>-------------------------------------------------------------------------------- <br>8、 DataGridView 列宽和行高自动调整的设定： <br>1) 设定行高和列宽自动调整 [VB.NET] ' 设定包括Header和所有单元格的列宽自动调整 DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells ' 设定包括Header和所有单元格的行高自动调整 DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells <br>2）指定列或行自动调整 [VB.NET] ' 第一列自动调整 DataGridView1.Columns(0).AutoSizeMode = _ DataGridViewAutoSizeColumnMode.DisplayedCells <br>3) 设定列头的高度和行头的宽度自动调整[VB.NET] ' 设定列头的宽度可以自由调整 DataGridView1.ColumnHeadersHeightSizeMode = _ DataGridViewColumnHeadersHeightSizeMode.AutoSize ' 设定行头的宽度可以自由调整 DataGridView1.RowHeadersWidthSizeMode = _ DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders <br>4） 随时自动调整 <br>&nbsp;&nbsp;&nbsp; a， 临时的，让列宽自动调整，这和指定AutoSizeColumnsMode属性一样。[VB.NET] ' 让 DataGridView1 的所有列宽自动调整一下。 DataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells) ' 让 DataGridView1 的第一列的列宽自动调整一下。 DataGridView1.AutoResizeColumn(0, DataGridViewAutoSizeColumnMode.AllCells) <br>&nbsp;&nbsp;&nbsp; b，临时的，让行高自动调整 [VB.NET] ' 让 DataGridView1 的所有行高自动调整一下。 DataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells) ' 让 DataGridView1 的第一行的行高自动调整一下。 DataGridView1.AutoResizeRow(0, DataGridViewAutoSizeRowMode.AllCells) <br>&nbsp;&nbsp;&nbsp; c，临时的，让行头和列头自动调整 [VB.NET] ' 列头高度自动调整 DataGridView1.AutoResizeColumnHeadersHeight() ' 行头宽度自动调整 DataGridView1.AutoResizeRowHeadersWidth( _ DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders) 关于性能： 通过 AutoSizeColumnsMode 或者 AutoSizeRowsMode 属性所指定的单元格进行自动调整时，如果调整次数过于多那么将可能导致性能下降，尤其是在行和列数比较多的情况下。在这时用 DisplayedCells 代替 AllCells 能减少非所见的单元格的调整，从而提高性能。 <br>-------------------------------------------------------------------------------- <br>9、 DataGridView 冻结列或行 <br>1） 列冻结 DataGridViewColumn.Frozen 属性为 True 时， 该列左侧的所有列被固定， 横向滚动时固定列不随滚动条滚动而左右移动。这对于重要列固定显示很有用。 [VB.NET] ' DataGridView1的左侧2列固定 DataGridView1.Columns(1).Frozen = True <br>2） 行冻结 DataGridViewRow.Frozen 属性为 True 时， 该行上面的所有行被固定， 纵向滚动时固定行不随滚动条滚动而上下移动。 [VB.NET] ' DataGridView1 的上3行固定 DataGridView1.Rows(2).Frozen = True <br>-------------------------------------------------------------------------------- <br>10、 DataGridView 列顺序的调整 设定 DataGridView 的 AllowUserToOrderColumns 为 True 的时候， 用户可以自由调整列的顺序。 当用户改变列的顺序的时候，其本身的 Index 不会改变，但是 DisplayIndex 改变了。你也可以通过程序改变 DisplayIndex 来改变列的顺序。 列顺序发生改变时会引发 ColumnDisplayIndexChanged 事件： [VB.NET] ' DataGridView1的ColumnDisplayIndexChanged事件处理方法 Private Sub DataGridView1_ColumnDisplayIndexChanged(ByVal sender As Object, _ ByVal e As DataGridViewColumnEventArgs) _ Handles DataGridView1.ColumnDisplayIndexChanged Console.WriteLine("{0} 的位置改变到 {1} 。", _ e.Column.Name, e.Column.DisplayIndex) End Sub <br>-------------------------------------------------------------------------------- <br>11、 DataGridView 行头列头的单元格 [VB.NET] ' DataGridView1的第一列列头内容 DataGridView1.Columns(0).HeaderCell.Value = "第一列" ' DataGridView1的第一行行头内容 DataGridView1.Rows(0).HeaderCell.Value = "第一行" ' DataGridView1的左上头部单元内容 DataGridView1.TopLeftHeaderCell.Value = "左上" [VB.NET] ' 改变DataGridView1的第一列列头内容 DataGridView1.Columns(0).HeaderText = "第一列" <br>-------------------------------------------------------------------------------- <br>12、 DataGridView 剪切板的操作 DataGridView.ClipboardCopyMode 属性被设定为 DataGridViewClipboardCopyMode.Disable 以外的情况时，「Ctrl + C」 按下的时候，被选择的单元格的内容会拷贝到系统剪切板内。格式有： Text， UnicodeText，Html， CommaSeparatedValue。可以直接粘贴到 Excel 内。 ClipboardCopyMode 还可以设定 Header部分是否拷贝： EnableAlwaysIncludeHeaderText 拷贝Header部分、EnableWithoutHeaderText 则不拷贝。默认是 EnableWithAutoHeaderText ， Header 如果选择了的话，就拷贝。 <br>1） 编程方式实现剪切板的拷贝 Clipboard.SetDataObject(DataGridView1.GetClipboardContent()) <br>2) DataGridView 的数据粘贴 实现剪切板的拷贝比较容易，但是实现 DataGridView 的直接粘贴就比较难了。「Ctrl + V」按下进行粘贴时，DataGridView 没有提供方法，只能自己实现。 以下，是粘贴时简单的事例代码，将拷贝数据粘贴到以选择单元格开始的区域内。 [VB.NET] ' 当前单元格是否选择的判断 If DataGridView1.CurrentCell Is Nothing Then Return End If Dim insertRowIndex As Integer = DataGridView1.CurrentCell.RowIndex ' 获取剪切板的内容，并按行分割 Dim pasteText As String = Clipboard.GetText() If String.IsNullOrEmpty(pasteText) Then Return End If pasteText = pasteText.Replace(vbCrLf, vbLf) pasteText = pasteText.Replace(vbCr, vbLf) pasteText.TrimEnd(New Char() {vbLf}) Dim lines As String() = pasteText.Split(vbLf) Dim isHeader As Boolean = True For Each line As String In lines ' 是否是列头 If isHeader Then isHeader = False Else ' 按 Tab 分割数据 Dim vals As String() = line.Split(ControlChars.Tab) ' 判断列数是否统一 If vals.Length - 1 &lt;&gt; DataGridView1.ColumnCount Then Throw New ApplicationException("粘贴的列数不正确。") End If Dim row As DataGridViewRow = DataGridView1.Rows(insertRowIndex) ' 行头设定 row.HeaderCell.Value = vals(0) ' 单元格内容设定 Dim i As Integer For i = 0 To row.Cells.Count - 1 row.Cells(i).Value = vals((i + 1)) Next i ' DataGridView的行索引+1 insertRowIndex += 1 End If Next line -------------------------------------------------------------------------------- <br>13、 DataGridView 单元格的ToolTip的设置 DataGridView.ShowCellToolTips = True 的情况下， 单元格的 ToolTip 可以表示出来。对于单元格窄小，无法完全显示的单元格， ToolTip 可以显示必要的信息。<br>1） 设定单元格的ToolTip内容 [VB.NET] ' 设定单元格的ToolTip内容 DataGridView1(0, 0).ToolTipText = "该单元格的内容不能修改" ' 设定列头的单元格的ToolTip内容 DataGridView1.Columns(0).ToolTipText = "该列只能输入数字" ' 设定行头的单元格的ToolTip内容 DataGridView1.Rows(0).HeaderCell.ToolTipText = "该行单元格内容不能修改" <br>2） CellToolTipTextNeeded 事件 在批量的单元格的 ToolTip 设定的时候，一个一个指定那么设定的效率比较低， 这时候可以利用 CellToolTipTextNeeded 事件。当单元格的 ToolTipText 变化的时候也会引发该事件。但是，当DataGridView的DataSource被指定且VirualMode=True的时候，该事件不会被引发。 [VB.NET] ' CellToolTipTextNeeded事件处理方法 Private Sub DataGridView1_CellToolTipTextNeeded(ByVal sender As Object, _ ByVal e As DataGridViewCellToolTipTextNeededEventArgs) _ Handles DataGridView1.CellToolTipTextNeeded e.ToolTipText = e.ColumnIndex.ToString() + ", " + e.RowIndex.ToString() End Sub -------------------------------------------------------------------------------- <br>14、 DataGridView 的右键菜单（ContextMenuStrip） DataGridView, DataGridViewColumn, DataGridViewRow, DataGridViewCell 有 ContextMenuStrip 属性。可以通过设定 ContextMenuStrip 对象来控制 DataGridView 的右键菜单的显示。 DataGridViewColumn 的 ContextMenuStrip 属性设定了 除了列头以外的单元格的右键菜单。 DataGridViewRow 的 ContextMenuStrip 属性设定了除了行头以外的单元格的右键菜单。DataGridViewCell 的 ContextMenuStrip 属性设定了指定单元格的右键菜单。 [VB.NET] ' DataGridView 的 ContextMenuStrip 设定 DataGridView1.ContextMenuStrip = Me.ContextMenuStrip1 ' 列的 ContextMenuStrip 设定 DataGridView1.Columns(0).ContextMenuStrip = Me.ContextMenuStrip2 ' 列头的 ContextMenuStrip 设定 DataGridView1.Columns(0).HeaderCell.ContextMenuStrip = Me.ContextMenuStrip2 ' 行的 ContextMenuStrip 设定 DataGridView1.Rows(0).ContextMenuStrip = Me.ContextMenuStrip3 ' 单元格的 ContextMenuStrip 设定 DataGridView1(0, 0).ContextMenuStrip = Me.ContextMenuStrip4 利用　CellContextMenuStripNeeded　事件可以设定单元格的右键菜单，尤其但需要右键菜单根据单元格值的变化而变化的时候。比起使用循环遍历，使用该事件来设定右键菜单的效率更高。但是，在DataGridView使用了DataSource绑定而且是VirtualMode的时候，该事件将不被引发。 [VB.NET] '　CellContextMenuStripNeeded事件处理方法 Private Sub DataGridView1_CellContextMenuStripNeeded( _ ByVal sender As Object, _ ByVal e As DataGridViewCellContextMenuStripNeededEventArgs) _ Handles DataGridView1.CellContextMenuStripNeeded Dim dgv As DataGridView = CType(sender, DataGridView) If e.RowIndex &lt; 0 Then '　列头的ContextMenuStrip设定 e.ContextMenuStrip = Me.ContextMenuStrip1 ElseIf e.ColumnIndex &lt; 0 Then '　行头的ContextMenuStrip设定 e.ContextMenuStrip = Me.ContextMenuStrip2 ElseIf TypeOf (dgv(e.ColumnIndex, e.RowIndex).Value) Is Integer Then '　如果单元格值是整数时 e.ContextMenuStrip = Me.ContextMenuStrip3 End If End Sub 同样，可以通过　RowContextMenuStripNeeded　事件来设定行的右键菜单。 [VB.NET] '　RowContextMenuStripNeeded事件处理方法 Private Sub DataGridView1_RowContextMenuStripNeeded( _ ByVal sender As Object, _ ByVal e As DataGridViewRowContextMenuStripNeededEventArgs) _ Handles DataGridView1.RowContextMenuStripNeeded Dim dgv As DataGridView = CType(sender, DataGridView) '　当"Column1"列是Bool型且为True时、设定其的ContextMenuStrip Dim boolVal As bject = dgv("Column1", e.RowIndex).Value Console.WriteLine(boolVal) If TypeOf boolVal Is Boolean AndAlso CBool(boolVal) Then e.ContextMenuStrip = Me.ContextMenuStrip1 End If End Sub CellContextMenuStripNeeded　事件处理方法的参数中、「e.ColumnIndex=-1」表示行头、「e.RowIndex=-1」表示列头。RowContextMenuStripNeeded则不存在「e.RowIndex=-1」的情况。 <br>-------------------------------------------------------------------------------- <br>15、 DataGridView 的单元格的边框、 网格线样式的设定 <br>1) DataGridView 的边框线样式的设定 DataGridView 的边框线的样式是通过 DataGridView.BorderStyle. 属性来设定的。 BorderStyle. 属性设定值是一个 BorderStyle. 枚举： FixedSingle（单线，默认）、Fixed3D、None。 <br>2) 单元格的边框线样式的设定 单元格的边框线的样式是通过 DataGridView.CellBorderStyle. 属性来设定的。 CellBorderStyle. 属性设定值是 DataGridViewCellBorderStyle. 枚举。（详细参见 MSDN） 另外，通过 DataGridView.ColumnHeadersBorderStyle. 和 RowHeadersBorderStyle. 属性可以修改 DataGridView 的头部的单元格边框线样式。 属性设定值是 DataGridViewHeaderBorderStyle. 枚举。（详细参见 MSDN） <br>3） 单元格的边框颜色的设定 单元格的边框线的颜色可以通过 DataGridView.GridColor 属性来设定的。默认是 ControlDarkDark 。但是只有在 CellBorderStyle. 被设定为 Single、SingleHorizontal、SingleVertical 的条件下才能改变其边框线的颜色。同样，ColumnHeadersBorderStyle. 以及 RowHeadersBorderStyle. 只有在被设定为 Single 时，才能改变颜色。 <br>4） 单元格的上下左右的边框线式样的单独设定 CellBorderStyle只能设定单元格全部边框线的式样。要单独改变单元格某一边边框式样的话，需要用到DataGridView.AdvancedCellBorderStyle属性。如示例： [VB.NET] ' 单元格的上边和左边线设为二重线 ' 单元格的下边和右边线设为单重线 DataGridView1.AdvancedCellBorderStyle.Top = _ DataGridViewAdvancedCellBorderStyle.InsetDouble DataGridView1.AdvancedCellBorderStyle.Right = _ DataGridViewAdvancedCellBorderStyle.Inset DataGridView1.AdvancedCellBorderStyle.Bottom = _ DataGridViewAdvancedCellBorderStyle.Inset DataGridView1.AdvancedCellBorderStyle.Left = _ DataGridViewAdvancedCellBorderStyle.InsetDouble 同样，设定行头单元格的属性是： AdvancedRowHeadersBorderStyle， 设定列头单元格属性是：AdvancedColumnHeadersBorderStyle。 <br>-------------------------------------------------------------------------------- <br>16、 DataGridView 单元格表示值的自定义 通过CellFormatting事件，可以自定义单元格的表示值。（比如：值为Error的时候，单元格被设定为红色） 下面的示例：将&#8220;Colmn1&#8221;列的值改为大写。 [VB.NET] 'CellFormatting 事件处理方法 Private Sub DataGridView1_CellFormatting(ByVal sender As Object, _ ByVal e As DataGridViewCellFormattingEventArgs) _ Handles DataGridView1.CellFormatting Dim dgv As DataGridView = CType(sender, DataGridView) ' 如果单元格是&#8220;Column1&#8221;列的单元格 If dgv.Columns(e.ColumnIndex).Name = "Column1" AndAlso _ TypeOf e.Value Is String Then ' 将单元格值改为大写 Dim str As String = e.Value.ToString() e.Value = str.ToUpper() ' 应用该Format，Format完毕。 e.FormattingApplied = True End If End Sub CellFormatting事件的DataGridViewCellFormattingEventArgs对象的Value属性一开始保存着未被格式化的值。当Value属性被设定表示用的文本之后，把FormattingApplied属性做为True，告知DataGridView文本已经格式化完毕。如果不这样做的话，DataGridView会根据已经设定的Format，NullValue，DataSourceNullValue，FormatProvider属性会将Value属性会被重新格式化一遍。 <br>-------------------------------------------------------------------------------- <br>17、 DataGridView 用户输入时，单元格输入值的设定 通过 DataGridView.CellParsing 事件可以设定用户输入的值。下面的示例：当输入英文文本内容的时候，立即被改变为大写。 [VB.NET] 'CellParsing 事件处理方法 Private Sub DataGridView1_CellParsing(ByVal sender As Object, _ ByVal e As DataGridViewCellParsingEventArgs) _ Handles DataGridView1.CellParsing Dim dgv As DataGridView = CType(sender, DataGridView) ' 单元格列为&#8220;Column1&#8221;时 If dgv.Columns(e.ColumnIndex).Name = "Column1" AndAlso _ e.DesiredType Is GetType(String) Then ' 将单元格值设为大写 e.Value = e.Value.ToString().ToUpper() ' 解析完毕 e.ParsingApplied = True End If End Sub <br>-------------------------------------------------------------------------------- <br>18、 DataGridView 新加行的默认值的设定 需要指定新加行的默认值的时候，可以在DataGridView.DefaultValuesNeeded事件里处理。在该事件中处理除了可以设定默认值以外，还可以指定某些特定的单元格的ReadOnly属性等。 [VB.NET] ' DefaultValuesNeeded 事件处理方法 Private Sub DataGridView1_DefaultValuesNeeded(ByVal sender As Object, _ ByVal e As DataGridViewRowEventArgs) _ Handles DataGridView1.DefaultValuesNeeded ' 设定单元格默认值 e.Row.Cells("Column1").Value = 0 e.Row.Cells("Column2").Value = "-" End Sub <br><br>摘自：<a href="http://hi.baidu.com/471348579/blog/item/2c5c27cb6d0e7d1abe09e681.html">http://hi.baidu.com/471348579/blog/item/2c5c27cb6d0e7d1abe09e681.html</a></p>
<img src ="http://www.cnitblog.com/lenatem/aggbug/60399.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lenatem/" target="_blank">雅量</a> 2009-07-27 21:12 <a href="http://www.cnitblog.com/lenatem/archive/2009/07/27/60399.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VisualStudio2008，点击视图 -----服务器资源管理器没有反应</title><link>http://www.cnitblog.com/lenatem/archive/2009/07/15/60131.html</link><dc:creator>雅量</dc:creator><author>雅量</author><pubDate>Wed, 15 Jul 2009 11:41:00 GMT</pubDate><guid>http://www.cnitblog.com/lenatem/archive/2009/07/15/60131.html</guid><wfw:comment>http://www.cnitblog.com/lenatem/comments/60131.html</wfw:comment><comments>http://www.cnitblog.com/lenatem/archive/2009/07/15/60131.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lenatem/comments/commentRss/60131.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lenatem/services/trackbacks/60131.html</trackback:ping><description><![CDATA[运行devenv /resetskippkgs
<img src ="http://www.cnitblog.com/lenatem/aggbug/60131.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lenatem/" target="_blank">雅量</a> 2009-07-15 19:41 <a href="http://www.cnitblog.com/lenatem/archive/2009/07/15/60131.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vb2008窗体中控件自动随窗体变化大小</title><link>http://www.cnitblog.com/lenatem/archive/2009/07/05/59856.html</link><dc:creator>雅量</dc:creator><author>雅量</author><pubDate>Sun, 05 Jul 2009 11:53:00 GMT</pubDate><guid>http://www.cnitblog.com/lenatem/archive/2009/07/05/59856.html</guid><wfw:comment>http://www.cnitblog.com/lenatem/comments/59856.html</wfw:comment><comments>http://www.cnitblog.com/lenatem/archive/2009/07/05/59856.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lenatem/comments/commentRss/59856.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lenatem/services/trackbacks/59856.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">Private&nbsp;FormOldWidth&nbsp;As&nbsp;Long<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Private&nbsp;FormOldHeight&nbsp;As&nbsp;Long<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Public&nbsp;Sub&nbsp;ResizeInit(ByVal&nbsp;FormName&nbsp;As&nbsp;Form)<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;Obj&nbsp;As&nbsp;Control<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FormOldWidth&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FormName.Size.Width<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FormOldHeight&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FormName.Size.Height<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;Error&nbsp;Resume&nbsp;Next<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;Each&nbsp;Obj&nbsp;In&nbsp;FormName.Controls<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj.Tag&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Obj.Left&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;Obj.Top&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;Obj.Width&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;Obj.Height&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;Obj<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;Error&nbsp;GoTo&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Sub<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Public&nbsp;Sub&nbsp;ResizeForm(ByVal&nbsp;FormName&nbsp;As&nbsp;Form)<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;Pos(</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">)&nbsp;As&nbsp;Double<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;i&nbsp;As&nbsp;Long,&nbsp;TempPos&nbsp;As&nbsp;Long,&nbsp;StartPos&nbsp;As&nbsp;Long<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;Obj&nbsp;As&nbsp;Control<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;ScaleX&nbsp;As&nbsp;Double,&nbsp;ScaleY&nbsp;As&nbsp;Double<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ScaleX&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FormName.Size.Width&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;FormOldWidth<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ScaleY&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FormName.Size.Height&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;FormOldHeight<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;Error&nbsp;Resume&nbsp;Next<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;Each&nbsp;Obj&nbsp;In&nbsp;FormName.Controls<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StartPos&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;To&nbsp;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TempPos&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;InStr(StartPos,&nbsp;Obj.Tag,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;vbTextCompare)<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;TempPos&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;Then<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pos(i)&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Mid(Obj.Tag,&nbsp;StartPos,&nbsp;TempPos&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;StartPos)<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StartPos&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;TempPos&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pos(i)&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj.Left&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Pos(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;ScaleX<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj.Top&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Pos(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;ScaleY<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj.Width&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Pos(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;ScaleX<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj.Height&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Pos(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;ScaleY<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;i<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;Obj<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;Error&nbsp;GoTo&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Sub</span></div>
<br>在调用的时候，如下：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Private&nbsp;Sub&nbsp;Form1_Resize(ByVal&nbsp;sender&nbsp;As&nbsp;Object,&nbsp;ByVal&nbsp;e&nbsp;As&nbsp;System.EventArgs)&nbsp;Handles&nbsp;MyBase.Resize<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Call&nbsp;ResizeForm(Me)<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Sub<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Private&nbsp;Sub&nbsp;Form1_Load(ByVal&nbsp;sender&nbsp;As&nbsp;System.Object,&nbsp;ByVal&nbsp;e&nbsp;As&nbsp;System.EventArgs)&nbsp;Handles&nbsp;MyBase.Load<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Call&nbsp;ResizeInit(Me)<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Sub</span></div>
<img src ="http://www.cnitblog.com/lenatem/aggbug/59856.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lenatem/" target="_blank">雅量</a> 2009-07-05 19:53 <a href="http://www.cnitblog.com/lenatem/archive/2009/07/05/59856.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VB2008编程实现Web Service的基础</title><link>http://www.cnitblog.com/lenatem/archive/2009/04/12/56284.html</link><dc:creator>雅量</dc:creator><author>雅量</author><pubDate>Sun, 12 Apr 2009 05:26:00 GMT</pubDate><guid>http://www.cnitblog.com/lenatem/archive/2009/04/12/56284.html</guid><wfw:comment>http://www.cnitblog.com/lenatem/comments/56284.html</wfw:comment><comments>http://www.cnitblog.com/lenatem/archive/2009/04/12/56284.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lenatem/comments/commentRss/56284.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lenatem/services/trackbacks/56284.html</trackback:ping><description><![CDATA[<p>Web Service目前可是目前计算机界一个非常流行的技术了，以至于有些人把Web Service列入目前最热门的十大技术之一。的确随着互联网的广泛应用和发展，尤其是电子商务的发展，出于互联网上各种复杂的应用系统和对更高安全性的要求，Web Service的横空出世的确满足了当前这些的要求和需要，其中的原因在下文中有详细的介绍。本文的主要内容是简要介绍一下Web Service的相关知识，以及使用Visual Basic .Net实现Web Services的具体方法和典型步骤。</p>
<p>　　一.Web Service为何物，我们为什么需要它：</p>
<p>　　Web Service的主要功能就是可以实现实现跨平台的功能调用。同时由于Web Service中使用XML来进行数据交换，所以在使用Web Service时不用担心防火墙的影响。由于Web Service集成了各种功能，并提供了一个友好的界面。所以在Web Service能够实现软件的重用。<br>另外Web Service的调用非常简单，简而言之调用互联网上的Web Service 就如同调用本地的组件一样简单，就是通过HTTP协议来调用互联网上的组件。至于具体的调用方法，请参阅本文第五节第七段的内容。所以Web Service就是互联网上的组件调用。</p>
<p>　　二．和Web Service相关的标准、协议：</p>
<p>　　Web Service是通过一系列标准和协议来保证和程序之间的动态连接和实现其安全调用的。其中主要的标准和协议是：XML、WSDL、SOAP、HTTP、UDDI。下面就简要介绍这些标准和协议。</p>
<p>　　1. XML：Web Service之间和Web Service和应用程序之间都是采用XML进行数据交换的。Web Service由于基于了XML，，这样Web Service在具备XML带来的优势的同时，也拥有了由于XML所带来的缺点。其中XML所带来的最重要缺点就是Web Service将大量的占有CPU的资源，因为XML数据要经过多步处理才能被系统使用。所以，即使调用一个功能较小的Web Service，也会感觉速度很慢，所以网络中对运行Web Service的主机要求是很高的。</p>
<p>　　2. HTTP：应用程序是提供HTTP协议来调用Web Service的。所以HTTP在Web Service调用过程中，起着通道的作用。</p>
<p>　　3. WSDL:：是Web Service描述语言的简写。它是XML格式，其作用是描述Web Service，指示应用程序和与Web Servie交互的方法。当实现了某种Web Service服务时，为了让别的程序调用，就必须告诉此Web Service的接口。如：服务名称，服务所在的机器名称，监听端口号，传递参数的类型等等。WSDL就是规定了有关Web Services描述的标准。</p>
<p>　　4. UDDI：是Universal Description, Discovery, and Integration的缩写。简单说，UDDI用于集中存放和查找WSDL描述文件，起着目录服务器的作用。</p>
<p>　　5. SOAP：是"Simple Object Access Protocol"的缩写，即：简单对象访问协议。SOAP是一种消息传递的协议，它规定了Web Services之间传递信息的方式。</p>
<p>　　三．本文章的程序设计、调试和运行的环境：</p>
<p>　　（1）.微软公司2008</p>
<p>　　（2）.Visual Studio .Net 2003企业构建版，.Net FrameWork SDK 1.1版本号4322。</p>
<p>　　（3）.IIS服务启动。</p>
<p>　　四．Visual Basic .Net实现Web Service：</p>
<p>　　.Net 的大的推动了Web Service的发展，而Visual Studio .Net的出现又极大的推动了Web Service的的广泛应用。在Visual Studio .Net推出之前，编写一个Web Service是一项非常复杂的工作，同样调用这个Web Service也十分麻烦。由于Visual Studio .Net对Web Service提供了较强的支持，很多细致、烦杂的工作都由Visual Studio .Net自动完成了。这样就使得上述工作变得非常简单。甚至不了解Web Service和其相关的标准、协议，也可以使用Visual Studio .Net编写Web Service，并使用这个Web Service。下面就来用Visual Basic .Net实现一个Web Service，此Web Service和数据库相关，数据库类型选用的是Sql Server。此Web Service提供了二个函数功能调用，其一名称为Binding，用以实现数据绑定，其二名称为Update，用以更新数据库中的数据。</p>
<p>　　以下就是Visual Basic .Net实现此Web Service的具体步骤：</p>
<p>　　1. 启动Visual Studio .Net。</p>
<p>　　2. 选择菜单【文件】|【新建】|【项目】后，弹出【新建项目】对话框。</p>
<p>　　3. 将【项目类型】设置为【Visual Basic项目】。</p>
<p>　　4. 将【模板】设置为【ASP.NET Web 服务】。</p>
<p>　　5. 在【位置】的文本框中输入"<a href="http://localhost/UpdateDataWebService">http://localhost/UpdateDataWebService</a>"后，单击【确定】按钮，这样在Visual Studio .Net就会计算机Internet信息服务的默认目录中创建一个名称为"UpdateDataWebService"文件夹，里面存放的是此项目的文件。具体如图01所示：<br><img height=365 alt="" src="http://www.cnitblog.com/images/cnitblog_com/lenatem/VB1.jpg" width=530 border=0><br>6. 选中【解决方案资源管理器】中的"Service1.asmx"文件，单击鼠标右键，在弹出的菜单中选择【查看代码】，则进入Service1.asmx.vb的编辑界面。</p>
<p>　　7. 在Service1.asmx..vb的首部，在导入命名空间的代码区中添加下列代码，下列代码作用是导入命名空间System.Data.SqlClient：</p>
<p>Imports System.Data.SqlClient</p>
<p>　　8. 在Service1.asmx..vb文件的"Public Class Service1 Inherits System.Web.Services.WebService"代码后，添加下列代码，下列代码是在Web Service中定义二个功能调用：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_24_300_Open_Image onclick="this.style.display='none'; Codehighlighter1_24_300_Open_Text.style.display='none'; Codehighlighter1_24_300_Closed_Image.style.display='inline'; Codehighlighter1_24_300_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_24_300_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_24_300_Closed_Text.style.display='none'; Codehighlighter1_24_300_Open_Image.style.display='inline'; Codehighlighter1_24_300_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">WebMethod&nbsp;(&nbsp;)&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">Public</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_24_300_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Function&nbsp;Binding()</span><span id=Codehighlighter1_24_300_Open_Text><span style="COLOR: #0000ff">Function</span><span style="COLOR: #000000">&nbsp;Binding&nbsp;(&nbsp;)&nbsp;</span><span style="COLOR: #0000ff">As</span><span style="COLOR: #000000">&nbsp;DataSet<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　</span><span style="COLOR: #0000ff">Dim</span><span style="COLOR: #000000">&nbsp;con&nbsp;</span><span style="COLOR: #0000ff">As</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">New</span><span style="COLOR: #000000">&nbsp;SqlConnection&nbsp;(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Server&nbsp;=&nbsp;LENOVO-1D428ED4\SQL2005;&nbsp;user id=&nbsp;sa&nbsp;;&nbsp;password=111111&nbsp;;&nbsp;database&nbsp;=&nbsp;northwind</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;)<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　</span><span style="COLOR: #0000ff">Dim</span><span style="COLOR: #000000">&nbsp;daCust&nbsp;</span><span style="COLOR: #0000ff">As</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">New</span><span style="COLOR: #000000">&nbsp;SqlDataAdapter&nbsp;(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Select&nbsp;*&nbsp;From&nbsp;Cust</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;,&nbsp;con&nbsp;)<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　</span><span style="COLOR: #0000ff">Dim</span><span style="COLOR: #000000">&nbsp;ds&nbsp;</span><span style="COLOR: #0000ff">As</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">New</span><span style="COLOR: #000000">&nbsp;DataSet&nbsp;(&nbsp;)<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　daCust.Fill(&nbsp;ds&nbsp;,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Cust</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;)<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　</span><span style="COLOR: #0000ff">Return</span><span style="COLOR: #000000">&nbsp;ds<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #0000ff">End&nbsp;Function</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_326_646_Open_Image onclick="this.style.display='none'; Codehighlighter1_326_646_Open_Text.style.display='none'; Codehighlighter1_326_646_Closed_Image.style.display='inline'; Codehighlighter1_326_646_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_326_646_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_326_646_Closed_Text.style.display='none'; Codehighlighter1_326_646_Open_Image.style.display='inline'; Codehighlighter1_326_646_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">WebMethod&nbsp;(&nbsp;)&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">Public</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_326_646_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Function&nbsp;Update()</span><span id=Codehighlighter1_326_646_Open_Text><span style="COLOR: #0000ff">Function</span><span style="COLOR: #000000">&nbsp;Update&nbsp;(&nbsp;</span><span style="COLOR: #0000ff">ByVal</span><span style="COLOR: #000000">&nbsp;ds&nbsp;</span><span style="COLOR: #0000ff">As</span><span style="COLOR: #000000">&nbsp;DataSet&nbsp;)&nbsp;</span><span style="COLOR: #0000ff">As</span><span style="COLOR: #000000">&nbsp;DataSet<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　</span><span style="COLOR: #0000ff">Dim</span><span style="COLOR: #000000">&nbsp;con&nbsp;</span><span style="COLOR: #0000ff">As</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">New</span><span style="COLOR: #000000">&nbsp;SqlConnection&nbsp;(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Server&nbsp;=&nbsp;LENOVO-1D428ED4\SQL2005&nbsp;;user id=&nbsp;sa&nbsp;;&nbsp;password=111111&nbsp;;&nbsp;database&nbsp;=&nbsp;northwind&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;)<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　</span><span style="COLOR: #0000ff">Dim</span><span style="COLOR: #000000">&nbsp;daCust&nbsp;</span><span style="COLOR: #0000ff">As</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">New</span><span style="COLOR: #000000">&nbsp;SqlDataAdapter&nbsp;(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Select&nbsp;*&nbsp;From&nbsp;Cust</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;,&nbsp;con&nbsp;)<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　</span><span style="COLOR: #0000ff">Dim</span><span style="COLOR: #000000">&nbsp;cbCust&nbsp;</span><span style="COLOR: #0000ff">As</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">New</span><span style="COLOR: #000000">&nbsp;SqlCommandBuilder&nbsp;(&nbsp;daCust&nbsp;)<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　daCust.Update&nbsp;(&nbsp;ds&nbsp;,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Cust</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;)<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　</span><span style="COLOR: #0000ff">Return</span><span style="COLOR: #000000">&nbsp;ds<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #0000ff">End&nbsp;Function</span></span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p>9. 保存上述的修改，一个简单的操作Sql Server数据库的Web Service就完成了，此时单击快捷键F5，此Web Service就开始运行，并可以对外提供服务了。具体如图02所示：</p>
<p><a href="http://www.dezai.cn/Article_Show.asp?ArticleID=18743&amp;ArticlePage=1"><img height=427 alt="" src="http://www.cnitblog.com/images/cnitblog_com/lenatem/VB2.jpg" width=520 border=0></a><br>下面就来介绍Visual Basic .Net中使用这个Web Service提供的服务来更新数据库的实现方法。<br>五．在Visual Basic .Net调用Web Service提供的服务：</p>
<p>　　当Web Service已经处于对外提供服务状态，Visual Basic .Net就可以通过HTTP"调用"来使用这些服务了。当然前提是要了解Web Service对外提供服务所对应的URL，当了解到Web Service对应的URL后，Visual Basic .Net就像是使用本地的类库一样使用Web Service中提供的各种功能。所以有些人说，Web Service从实质上说，就是通过HTTP调用远程组件的一种方式。在Visual Basic .Net具体实现加入Web Service可参阅下面步骤中的第七步。</p>
<p>　　在下面介绍的这个数据库应用程序是通过使用上面的Web Service中提供的"Binding"服务，对程序中DataGrid组件实现数据绑定，提供使用Web Service中提供的"Update"服务，通过程序中的DataGrid来修改数据库。下面就是Visual Basic .Net中使用Web Service提供服务来编写数据库应用程序的具体步骤，： </p>
<p>　　1. 启动Visual Studio .Net。<br>　 <br>　　2. 选择菜单【文件】|【新建】|【项目】后，弹出【新建项目】对话框。</p>
<p>　　3. 将【项目类型】设置为【Visual Basic项目】。</p>
<p>　　4. 将【模板】设置为【Windows应用程序】。</p>
<p>　　5. 在【名称】文本框中输入【TestWebService】。</p>
<p>　　6. 在【位置】的文本框中输入【E:\VS.NET项目】，然后单击【确定】按钮，这样在"E:\VS.NET项目"中就产生了名称为"TestWebService"文件夹，里面存放的就是TestWebService项目的所有文件。</p>
<p>　　7. 选择【解决方案资源管理器】|【引用】后，单击鼠标右键，在弹出的菜单中选择【添加Web 引用】，在弹出的【添加Web引用】对话框中的【地址】文本框中输入"<a href="http://localhost/">http://localhost/</a> UpdateDataWebService /Service1.asmx "后，单击回车键后，可得图03所示界面。单击图03中【添加引用】按钮，则在【TestWebService】项目中加入了Web引用。请注意"<a href="http://localhost/">http://localhost/</a> UpdateDataWebService /Service1.asmx "就是上面完成的Web Service对外提供服务的URL地址，具体可参阅图02所示：</p>
<p><a href="http://www.dezai.cn/Article_Show.asp?ArticleID=18743&amp;ArticlePage=1"><img height=382 alt="" src="http://www.cnitblog.com/images/cnitblog_com/lenatem/vb3.jpg" width=548 border=0></a><br>8. 从【工具箱】中的【Windows窗体组件】选项卡中往Form1窗体中拖入下列组件，并执行相应的操作：</p>
<p>　　一个DataGrid组件。</p>
<p>　　二个Button组件，，分别是Button1至Button2，并在这二个Button组件拖入Form1的设计窗体后，分别双击它们，则系统会在Form1.vb文件分别产生这二个组件的Click事件对应的处理代码。</p>
<p>　　9. 按照表01所示调整窗体中各组件属性的数值：</p>
<p>组件类型 组件名称 属性 设置结果 <br>Form&nbsp; Form1 Text&nbsp; 测试Web Service <br>Form1 MaximizeBox False <br>Form1 FormBorderStyle&nbsp; FixedSingle <br>Button&nbsp; Button1&nbsp; Text&nbsp; 绑定 <br>Button1 FlatStyle Flat <br>Button2 Text&nbsp; 修改 <br>Button2 FlatStyle Flat </p>
<p>在调整完组件属性值后，再按照图04所示调整组件的位置和排列顺序：</p>
<p><a href="http://www.dezai.cn/Article_Show.asp?Artic"><img height=312 alt="" src="http://www.cnitblog.com/images/cnitblog_com/lenatem/vb4.jpg" width=285 border=0></a><br>10. 把Visual Studio .Net的当前窗口切换到Form1.vb的代码编辑窗口，并用下列代码替换Form1.vb中的Button1的Click事件对应的处理代码，下列代码功能是使用Web Service中提供的"Binding"服务对DataGrid组件实现数据绑定：</p>
<p><a href="http://www.dezai.cn/Article_Show.asp?ArticleID=18743&amp;ArticlePage=1">&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_8_240_Open_Image onclick="this.style.display='none'; Codehighlighter1_8_240_Open_Text.style.display='none'; Codehighlighter1_8_240_Closed_Image.style.display='inline'; Codehighlighter1_8_240_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_8_240_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_8_240_Closed_Text.style.display='none'; Codehighlighter1_8_240_Open_Image.style.display='inline'; Codehighlighter1_8_240_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">Private</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_8_240_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Sub&nbsp;Button1_Click()</span><span id=Codehighlighter1_8_240_Open_Text><span style="COLOR: #0000ff">Sub</span><span style="COLOR: #000000">&nbsp;Button1_Click&nbsp;(&nbsp;</span><span style="COLOR: #0000ff">ByVal</span><span style="COLOR: #000000">&nbsp;sender&nbsp;</span><span style="COLOR: #0000ff">As</span><span style="COLOR: #000000">&nbsp;System.Object&nbsp;,&nbsp;</span><span style="COLOR: #0000ff">ByVal</span><span style="COLOR: #000000">&nbsp;e&nbsp;</span><span style="COLOR: #0000ff">As</span><span style="COLOR: #000000">&nbsp;System.EventArgs&nbsp;)&nbsp;</span><span style="COLOR: #0000ff">Handles</span><span style="COLOR: #000000">&nbsp;Button1.Click<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　</span><span style="COLOR: #0000ff">Dim</span><span style="COLOR: #000000">&nbsp;MyService&nbsp;</span><span style="COLOR: #0000ff">As</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">New</span><span style="COLOR: #000000">&nbsp;localhost.Service1&nbsp;(&nbsp;)<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　DataGrid1.DataSource&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;MyService.Binding&nbsp;(&nbsp;)<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　DataGrid1.DataMember&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Cust</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #0000ff">End&nbsp;Sub</span></span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<br>
<p></a>11. 用下列代码替换Form1.vb中的Button2的Click事件对应的处理代码，下列代码功能是使用Web Service中提供的"Update"服务实现通过DataGrid来修改数据库数据：</p>
<p><a href="http://www.dezai.cn/Article_Show.asp?ArticleID=18743&amp;ArticlePage=1">&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_8_350_Open_Image onclick="this.style.display='none'; Codehighlighter1_8_350_Open_Text.style.display='none'; Codehighlighter1_8_350_Closed_Image.style.display='inline'; Codehighlighter1_8_350_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_8_350_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_8_350_Closed_Text.style.display='none'; Codehighlighter1_8_350_Open_Image.style.display='inline'; Codehighlighter1_8_350_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">Private</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_8_350_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Sub&nbsp;Button2_Click()</span><span id=Codehighlighter1_8_350_Open_Text><span style="COLOR: #0000ff">Sub</span><span style="COLOR: #000000">&nbsp;Button2_Click&nbsp;(&nbsp;</span><span style="COLOR: #0000ff">ByVal</span><span style="COLOR: #000000">&nbsp;sender&nbsp;</span><span style="COLOR: #0000ff">As</span><span style="COLOR: #000000">&nbsp;System.Object&nbsp;,&nbsp;</span><span style="COLOR: #0000ff">ByVal</span><span style="COLOR: #000000">&nbsp;e&nbsp;</span><span style="COLOR: #0000ff">As</span><span style="COLOR: #000000">&nbsp;System.EventArgs&nbsp;)&nbsp;</span><span style="COLOR: #0000ff">Handles</span><span style="COLOR: #000000">&nbsp;Button2.Click<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　</span><span style="COLOR: #0000ff">Dim</span><span style="COLOR: #000000">&nbsp;MyService&nbsp;</span><span style="COLOR: #0000ff">As</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">New</span><span style="COLOR: #000000">&nbsp;localhost.Service1&nbsp;(&nbsp;)<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　</span><span style="COLOR: #0000ff">Dim</span><span style="COLOR: #000000">&nbsp;ds&nbsp;</span><span style="COLOR: #0000ff">As</span><span style="COLOR: #000000">&nbsp;DataSet&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;DataGrid1.DataSource<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　</span><span style="COLOR: #0000ff">Dim</span><span style="COLOR: #000000">&nbsp;dsChanges&nbsp;</span><span style="COLOR: #0000ff">As</span><span style="COLOR: #000000">&nbsp;DataSet&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ds.GetChanges&nbsp;(&nbsp;)<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　</span><span style="COLOR: #0000ff">If</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">Not</span><span style="COLOR: #000000">&nbsp;(&nbsp;dsChanges&nbsp;</span><span style="COLOR: #0000ff">Is</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">Nothing</span><span style="COLOR: #000000">&nbsp;)&nbsp;</span><span style="COLOR: #0000ff">Then</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　　ds.Merge&nbsp;(&nbsp;MyService.Update&nbsp;(&nbsp;dsChanges&nbsp;)&nbsp;,&nbsp;</span><span style="COLOR: #0000ff">True</span><span style="COLOR: #000000">&nbsp;)<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>　</span><span style="COLOR: #0000ff">End</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">If</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #0000ff">End&nbsp;Sub</span></span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p></a>12. 至此, 【TestWebService】项目的全部工作就完成了，调用Web Service是不是很简单。此时单击快捷键F5运行程序后。单击程序中的【绑定】按钮就会对程序中的DataGrid组件实现数据绑定，单击程序中的【修改】按钮，则程序会根据DataGrid中的内容来更新数据库，图05就是【TestWebService】的运行界面：</p>
<p><a href="http://www.dezai.cn/Article_Show.asp?ArticleID=18743&amp;ArticlePage=2"><img height=298 alt="" src="http://www.cnitblog.com/images/cnitblog_com/lenatem/VB5.jpg" width=272 border=0></a><br>五．总结：</p>
<p>　　本文介绍了Web Service在目前大行其道的原因，并结合二个示例介绍Visual Basic .Net在Web Service的实现和调用上的强大功能，正如本文前面所说，Visual Studio .Net的出现使得web Service的这项原先繁杂的工作变得异常的简单，因为Visual Basic .Net已经替代我们作了这些描述性的、基础的底层工作，以至于你不需要了解为什么，只需要知道你要实现什么就可以编写、调用Web Service了。 在实现Web Service在数据库方面应用所显示</p>
<p>　　Web Service虽然以其强大功能和其优越性正在受到越来越多人的青睐，但也不可以回避它的缺点，譬如其速度慢就使得我几乎无法忍受。等等这样的原因也决定了Web Service并不适用于所有的环境。如单机运行程序和局域网上的同构应用程序等就尽量不采用Web Service方式。本文只是展示了Visual Studio .Net在Web Service上的初步用途，至于更复杂的使用、调用方法只能在后续的文章中介绍了，感兴趣的朋友，我们下一文再见！</p>
<p>该文章转载自德仔工作室：<a href="http://www.dezai.cn/Article_Show.asp?ArticleID=18743&amp;ArticlePage=2">http://www.dezai.cn/Article_Show.asp?ArticleID=18743&amp;ArticlePage=2</a><br></p>
<p><br>数据库情况：<br><img height=264 alt="" src="http://www.cnitblog.com/images/cnitblog_com/lenatem/VB6.jpg" width=649 border=0><br><br>&nbsp;</p>
<img src ="http://www.cnitblog.com/lenatem/aggbug/56284.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lenatem/" target="_blank">雅量</a> 2009-04-12 13:26 <a href="http://www.cnitblog.com/lenatem/archive/2009/04/12/56284.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>