文章 2 - 使用 Whidbey (VB.NET) 通过 DataSet 和 DataGrid 控件显示数据






4.26/5 (21投票s)
2004年5月10日
8分钟阅读

333850
本文介绍了在数据库创建后如何使用 DataSet 和 DataGrid 控件显示数据。
引言
我之前的文章介绍了使用 Visual Studio 代号 Whidbey 和 VB.NET 逐步动态创建 SQL Server 数据库、表和存储过程。我希望您已经对动态创建 SQL Server 数据库和表有了很好的入门。本文介绍了在数据库创建后如何使用 DataSet 和 DataGrid 控件显示数据。
关于“DataTable”和“DataSet”对象
DataSet 是 ADO.NET 架构的主要组成部分。它是一组数据,是从数据源检索到的数据的内存缓存。DataSet 包含一个 DataTable 对象集合。DataTable 表示一个内存中的数据表。DataTable 的名称只有在您将“CaseSensitive”的公共属性设置为指示表中字符串比较是否区分大小写时才区分大小写。
例如,如果您将 DataTable 命名为“MyTable”,而您将表定义为“Mytable”,它将不会查找该表,因为 DataTable 名称是区分大小写的。DataSet 和 DataView 是使用 DataTable 的两个数据对象。
DataTable 的一些公共属性如下所示:
属性 描述
- CaseSensitive- 此属性返回一个布尔值,用于检查表名是否区分大小写。如果比较区分大小写,则返回 - True;否则,返回- False。例如,如果您将- DataTable命名为“- MyTable”,而您将表定义为“- Mytable”,它将不会查找该表。- CaseSensitive属性会影响排序、搜索和过滤中的字符串比较。
- ChildRelations- 简单来说,它是两个表之间的关系。它就像数据库关系键,如主键、次要键等,通过一个关键字段关联两个表。 
- Columns- 数据库字段或元组。 
- 约束- 使用主键、索引等键维护表之间关系的约束。 
- DataSet- 根据表名检索一组数据或记录。 
- DefaultView- 表的自定义视图,如过滤视图或光标位置。 
- HasErrors- 如果任何行有错误,则显示错误。 
- 区域设置 (Locale)- 用于比较字符串的本地信息。 
- MinimumCapacity- 表的初始大小。 
- ParentRelations- 与父表发生的任何关系。 
- PrimaryKey- 用于唯一标识行的键。 
- Rows- 行数作为集合。 
- TableName- 数据库表的名称。 
DataTable 的一些公共方法如下所示:
- AcceptChanges- 提交事务。 
- BeginInit- DataTable的初始化。
- BeginLoadData- 关闭通知、索引维护和约束。 
- Clear- 清除 - DataTable中的所有记录。
- 克隆- 将结构复制到另一个表(包括约束、关键字段、模式等)。 
- Compute- 根据表达式过滤数据。 
- 复制- 复制数据库结构和数据(不像 - Clone)。
- 处置- 从内存中释放(卸载)。 
- EndInit- 初始化结束时触发。 
- EndLoadData- 从 - DataTable加载数据结束时触发。
- GetErrors- 获取包含错误的 - DataRow对象数组。
- ImportRow- 导入记录。 
- LoadDataRow- 根据条件更新行。如果找不到匹配记录,则插入记录。 
- NewRow- 在 - DataTable中创建新行。
- RejectChanges- 回滚更改。 
- Reset- 将 - DataTable重置到原始位置。
- Select- 获取数据记录数组。 
与 DataTable 相关的一些事件有 ColumnChanged、ColumnChanging、RowChanged、RowChanging、RowDeleted、RowDeleting 等。
注意:System.Data 命名空间用于包含在您的项目中,它主要由构成 ADO.NET 架构的类组成。用于创建 DataSet 对象的程序集名称是 System.Data.dll 文件中的 System.Data。
关于“SQLDataAdapter”类
SQLDataAdapter 类用于在 DataSet 中检索和更新数据库记录。它是 SQL Server 和 DataSet 之间的桥梁。
有两种方法用于添加或更新记录。它们是:
- Add方法将填充或刷新- DataSet中的行或记录。
- Update方法用于更新- DataSet中的记录。请注意,这将根据- SqlAdapter状态调用相应的 SQL 语句,例如- INSERT、- UPDATE或- DELETE。
以下代码行将帮助您了解 SqlDataAdapter 如何负责使用 SqlCommand 对象填充 DataSet。
' fill a DataSet.
' A SqlCommand object is used to execute sql statements,
' which we already discussed the Article 1
Dim Mycmd As New SqlCommand(“SELECT * FROM dbo.Customer”, myConnection)
Dim mySqlDataAdapter As New SqlDataAdapter(Mycmd)
Dim mydsCustomer As New DataSet()
         
mySqlDataAdapter.Fill(mydsCustomer, "Customer")
关于 DataGrid 控件
DataGrid 控件从表中的数据源填充行。它用于检索和更新数据库记录。DataGrid 控件支持选择、编辑、删除、分页和排序。
DataGrid 中的不同列类型决定了控件中列的行为。一些列类型有 BoundColumn、ButtonColumn、EditCommandColumn、HyperLinkColumn 和 TemplateColumn 等。
注意:System.Web.UI.WebControls 命名空间用于将此对象包含到您的应用程序中。用于创建 DataGrid 控件的程序集名称是 System.Web.dll 文件中的 System.Web。
在 .NET 表单上使用 DataGrid 控件的步骤
DataGrid 控件允许您从表中的数据源中选择、排序和编辑项目。
- 将 DataGrid绑定到DataSet。首先,您需要将 DataSet绑定到DataGrid,然后将Visible属性设置为True。如果您不将Visible属性设置为True,DataGrid仍然会显示,但滚动条会丢失。' Set the DataGrid caption, bind it to the DataSet, and then make it ' Visible mydgCustomer.CaptionText = "Customer" ' Notice here that instead of using the DataSet table name, ' "customers", the alternate syntax of table index is used. mydgCustomer.DataSource = mySqlDataAdapter.Tables(0) mydgCustomer.Visible = True 请注意语法 mySqlDataAdapter.Tables(0),您也可以使用带有DataSet表名“Customer”的替代语法。
- 自定义格式化 DataGrid。表格样式对象允许您自定义格式化 DataGrid对象。用于自定义格式化DataGrid对象的对象名称是DataGridTableStyle。它表示System.Windows.Forms.DataGrid控件在运行时绘制的表格。它是一个类文件,表示应用自定义格式来绘制网格。以下是 DataGridTableStyle属性列表,可以设置这些属性来覆盖System.Windows.Forms.DataGrid控件属性。这样,它允许您进行自己的自定义格式化。- AllowSorting属性允许您根据用户单击每个列标题进行排序,这将按升序或降序排序。当- AllowSorting属性设置为- True时,每个列标题中会出现一个三角形,指示排序方向。用户可以单击任何列标题以按该列排序网格。第二次单击列会更改排序方向。如果允许排序,则返回- True,否则返回- False。此属性的默认值为- True。
- AlternatingBackColor允许您设置交替的行颜色(或获取或设置网格奇数行的背景颜色)。- mydgCustomer.AlternatingBackColor = System.Drawing.Color.Red 
- BackColor属性设置对象的背景颜色。
- ColumnHeadersVisible属性允许您在表单上的- DataGrid控件中隐藏或显示列标题。
- ForeColor允许您设置- DataGrid控件的前景颜色。
- GridLineColor允许您设置- DataGrid线条颜色。
- GridLineStyle允许您设置- DataGrid的样式。- mydgCustomer.GridLineStyle = System.Windows.Forms.DataGridLineStyle.None mydgCustomer.GridLineStyle = System.Windows.Forms.DataGridLineStyle.Solid
- HeaderBackColor允许您设置或获取标题的背景颜色。
- HeaderFont允许您设置或获取- DataGrid控件上的标题字体。
- HeaderForeColor设置列标题的前景颜色。
- LinkColor允许您设置网页链接文本的颜色。
- PreferredColumnWidth允许您设置- DataGrid列宽。
- PreferredRowHeight允许您设置- DataGrid行高。
- ReadOnly属性允许您将- DataGrid设置为只读。无法进行编辑(更新、插入或删除)。
- RowHeadersVisible属性允许您获取或设置- DataGrid控件上行标题的可见属性。
 
使用 DataSet 和 DataGrid 控件显示数据的步骤
您现在了解了 DataTable 和 DataSet 对象、DataAdapter 类和 DataGrid 控件的基本功能。接下来,我将逐步解释如何在您的 .NET 应用程序中创建和使用这些对象、类或控件。
- 创建并打开数据库连接、数据库对象。如果您想了解更多关于创建数据库和表的信息,请参阅我之前的文章,其中描述了如何使用 WhidBey 或 .NET 环境创建和打开数据库连接。此外,之前的文章还解释了如果我们只安装了 MSDE,如何打开 SQL 数据库连接。为了解决这个问题,我们在 .NET Whidbey 中使用了 SQL 错误异常代码。 
- 将 DataGrid控件添加到您的表单。将一个新的 DataGrid控件添加到您的表单,并将其命名为mydgCustomer。
- 绑定到 DataGrid以进行显示。在您的表单上添加 DataGrid控件后,下一步是使用DataAdapter填充数据。以下例程从 Mydatabase 表中获取客户信息,将其放入一个DataSet中,该DataSet用于绑定到DataGrid以进行显示。If IsNothing(mydgCustomer.DataSource) Then Dim strMySQL As String = _ "USE MyDatabase " & vbCrLf & _ "SELECT * " & _ "FROM myStoredProcedure" Try ' The SqlConnection class allows you to communicate ' with SQL Server and DataTable. Dim myConnection As New SqlConnection(myConnection) ' A SqlCommand object is used to execute the SQL commands. Dim mycmd As New SqlCommand(strMySQL, myConnection) Dim mySqlDataAdapter As New SqlDataAdapter(mycmd) Dim mydsCustomer As New DataSet() ' The SqlDataAdapter is responsible for using ' a SqlCommand object to fill a DataSet. mySqlDataAdapter.Fill(mydsCustomer, "Customer") ' Set the DataGrid caption, bind it to the DataSet, ' and then make it Visible mydgCustomer.CaptionText = "Customer" ' Notice here that instead of using the DataSet table name, ' "Customers", the alternate syntax of table index is used. mydgCustomer.DataSource = mySqlDataAdapter.Tables(0) ' Settings to the DataGrid Styles, which will call the procedure ' setMyDataGridTableStyleProperties and the parameter ' as DataGrid setMyDataGridTableStyleProperties(mydgCustomer) mydgCustomer.Visible = True Catch sqlExc As SqlException MessageBox.Show(sqlExc.ToString, "SQL Exception Error!", _ MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End If 
- 更新 DataGrid样式属性。过程 setMyDataGridTableStyleProperties允许您设置DataGrid样式属性,将DataGrid作为对象参数传递。首先,我们需要使用 DataGridTableStyle对象创建DataGrid样式,并可以应用样式属性,例如AlternatingBackColor、BackColor、ForeColor、GridLineColor、HeaderrBackColor、HeaderFont、HeaderForeColor、LinkColor、Mapping等。AddRange方法功能允许您在DataGrid组件的特定范围内设置样式。Private Sub setMyDataGridTableStyleProperties (ByRef myDG as DataGrid) ' Use a table style object to apply custom formatting ' to the DataGrid. Dim mydgTableStyle As New DataGridTableStyle() Dim mygrdColStyle1, mygrdColStyle2, mygrdColStyle3, _ mygrdColStyle4, mygrdColStyle5 As New & _ DataGridTextBoxColumn() With mydgTableStyle .AlternatingBackColor = Color.LightCoral .BackColor = Color.LawnGreen .ForeColor = Color.LightGray .GridLineColor = Color.LightGreenrodYellow .GridLineStyle = System.Windows.Forms.DataGridLineStyle. .HeaderBackColor = Color. LightGray .HeaderFont = New Font("Courier", 10.0!, FontStyle.Bold) .HeaderForeColor = Color. LawnGreen .LinkColor = Color.Teal ' Do not forget to set the MappingName property. ' Without this, the DataGridTableStyle properties ' and any associated DataGridColumnStyle objects ' will have no effect. .MappingName = "Customers" .SelectionBackColor = Color. LawnGreen .SelectionForeColor = Color. LightGray End With ' Use column style objects to apply formatting specific ' to each column of customer table. With mygrdColStyle1 .HeaderText = "ID#" .MappingName = "CustomerID" .Width = 50 End With With mygrdColStyle2 .HeaderText = "Last Name" .MappingName = "NameLast" .Width = 140 End With With mygrdColStyle3 .HeaderText = "Address" .MappingName = "Address1" .Width = 180 End With With mygrdColStyle4 .HeaderText = "State" .MappingName = "State" .Width = 30 End With With mygrdColStyle5 .HeaderText = "Phone" .MappingName = "Phone" .Width = 70 End With ' Add the column style objects to the tables style's ' column styles collection. If you fail to do this the column ' styles will not apply. mydgTableStyle.GridColumnStyles.AddRange _ (New DataGridColumnStyle() _ { mygrdColStyle1, mygrdColStyle2, _ mygrdColStyle3, mygrdColStyle4, mygrdColStyle5}) ' Add the table style object to the DataGrid's table styles ' collection. Again, failure to add the style to the collection ' will cause the style to not take effect. myDG.TableStyles.Add(mydgTableStyle) End Sub 
要求
- Microsoft Visual Studio.Whidbey Ver 8.0 或
- Microsoft Visual Studio .NET Professional 或更高版本。
- Windows 2000 或 Windows XP。
摘要
从本文中,我们了解了 DataSet、DataTable 对象、DataAdapter 类的描述。此外,您对使用 DataAdapter 类中的 Fill 方法使用 DataGrid 有了一个简要的了解。它还解释了如何在 DataGrid 中使用样式。
如果您需要任何建议或帮助,请通过 benoyraj@yahoo.com 联系我。
