65.9K
CodeProject 正在变化。 阅读更多。
Home

在单个 DataGrid 中显示多个表字段数据

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.22/5 (3投票s)

2007年11月2日

CPOL
viewsIcon

22577

在一个 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 方法从数据库检索数据。该方法包括

  1. 一个 DataSet - 一个 DataTable 对象的集合
  2. 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
© . All rights reserved.