Visual Basic 8 (2005)WebForms.NET 3.0Visual Studio 2005中级开发Visual StudioWindows.NETVisual BasicASP.NET
在单个 DataGrid 中显示多个表字段数据
在一个 DataGrid 中显示多个表的数据。
引言
本文档将帮助您在一个网格中显示多个表字段。
数据库设计
以下是创建示例数据库的 SQL 脚本
CREATE TABLE [dbo].[US_Status] (
[USST_StatusId] [int] IDENTITY (1, 1) NOT NULL ,
[USST_Name] [varchar] (50) NOT NULL ,
[USST_Timestamp] [timestamp] NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[US_Type] (
[USTY_TypeID] [int] IDENTITY (1, 1) NOT NULL ,
[USTY_Name] [varchar] (50) NOT NULL ,
[USTY_Timestamp] [timestamp] NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[US_User] (
[USUS_UserID] [int] IDENTITY (1, 1) NOT NULL ,
[USUS_Email] [varchar] (100) NOT NULL ,
[USUS_Password] [varchar] (100) NOT NULL ,
[USUS_FirstName] [varchar] (100) NOT NULL ,
[USUS_LastName] [varchar] (100) NOT NULL ,
[USUS_CheckVal] [varchar] (100) NOT NULL ,
[USST_StatusID] [int] NOT NULL ,
[USTY_TypeID] [int] NOT NULL ,
[USUS_Timestamp] [timestamp] NOT NULL
) ON [PRIMARY]
GO
Using the Code
我使用下面的 BindData
方法从数据库检索数据。该方法包括
- 一个
DataSet
- 一个DataTable
对象的集合 DataRelation
- 表示两个DataTable
对象之间的父/子关系
在这个方法中,我们创建了两个数据关系
User_StatusRelation
:父表是 USST_Status,它具有主键User_TypeRelation
:父表是 USST_Type,它具有主键
Sub BindData()
Dim ConString As String = "Data Source=AARTHANA-BF2A86\SQLEXPRESS;" & _
"Initial Catalog=Ec2;Integrated Security=True"
Dim conn As New SqlConnection(ConString)
Dim cmd As SqlCommand
conn.Open()
cmd = New SqlCommand("select * from US_User", conn)
adapater = New SqlDataAdapter(cmd)
adapater.Fill(DB, "US_User")
cmd.CommandText = "select * from US_Status"
adapater.Fill(DB, "US_Status")
cmd.CommandText = "select * from US_Type"
adapater.Fill(DB, "US_Type")
statusview = DB.Tables("US_Status")
tempdataview = DB.Tables("US_Type")
User_Statusrelation = New Data.DataRelation("", _
DB.Tables("US_Status").Columns("USST_StatusID"), _
DB.Tables("US_User").Columns("USST_StatusID"), True)
DB.Relations.Add(User_Statusrelation)
User_Typerelation = New Data.DataRelation("", _
DB.Tables("US_Type").Columns("USTY_TypeID"), _
DB.Tables("US_User").Columns("USTY_TypeID"), True)
DB.Relations.Add(User_Typerelation)
DbGrid.DataSource = DB
DbGrid.DataBind()
End Sub
有趣的事实
我们 HTML 代码中比较有趣的部分是
<asp:TemplateColumn HeaderText="Status"><ItemTemplate >
<%#BindJob(Container.DataItem)%>
</ItemTemplate>
<EditItemTemplate >
<asp:DropDownList ID="statuslist" runat ="server"
DataTextField="USST_Name" DataValueField ="USST_StatusId"
DataSource =<%#statusview%> >
</asp:DropDownList>
</EditItemTemplate>
<FooterTemplate >
<asp:DropDownList ID="statuslistAdd"
runat ="server" DataTextField="USST_Name"
DataValueField ="USST_StatusId"
DataSource =<%#statusview%> />
</FooterTemplate>
</asp:TemplateColumn>
我们使用 #BindJob(Container.DataItem)
绑定 DataGrid
的值,它从 US_Status 表中获取 USST_Name 的值。
Public Function BindJob(ByVal o As Object) As String
Dim rowin As Data.DataRow
Dim drv As Data.DataRowView = o
rowin = drv.Row.GetParentRow(User_Statusrelation)
Return rowin("USST_Name")
End Function
此代码还包括以下功能:
- 在
DataGrid
中插入一行 - 在
DataGrid
中使用DropDownList