天天看點

利用ASP.NET DataGrid顯示主次關系的資料(VB.NET)

利用ASP.NET DataGrid顯示主次關系的資料
作者:孟憲會 出自:【孟憲會之精彩世界】 釋出日期:2003年4月18日 12點0分0秒

    大家在實際工作中有沒有遇到要在DataGrid中顯示帶有主次結構的資料呢?如果你對ADO.NET和SQL Server2000熟悉的話,我們下面就舉一個利用VS.NET自帶的示例資料庫Northwind和VB.NET來說明如何實作這一目标。

    首先,我們先準備要顯示的帶有主次結構的資料。

    下面就是要綁定到HierarchicalDataGrid.aspx的VB.NET代碼檔案HierarchicalDataGrid.aspx.vb的内容:

Imports System.Data.SqlClient

Public Class HierarchicalDataGrid

Inherits System.Web.UI.Page

Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid

#Region " Web Form Designer Generated Code "

'下面的調用對Web Form設計器來說是必須的

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init

'CODEGEN: 這個方法是為Web Form設計器調用的

'不要用代碼編輯器改變這裡.

InitializeComponent()

End Sub

#End Region

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

'打開資料庫連接配接

Dim OrdersConnection As New SqlConnection("Server=(local)/NetSDK;Database=northwind;Trusted_Connection=yes")

'得到訂單和訂單詳細資訊

Dim OrderAdapter As New SqlDataAdapter("Select * from Orders; select OrderID ,Products.ProductName,[order Details].Unitprice,[order Details].Quantity,[order Details].discount from [order Details],Products where [Order Details].ProductId=Products.ProductID", OrdersConnection)

'建立并填充DataSet對象

Dim OrderDataSet As New DataSet()

OrderAdapter.Fill(OrderDataSet)

'設定表名字

OrderDataSet.Tables(0).TableName = "Orders"

OrderDataSet.Tables(1).TableName = "Order Details"

'在基于OrderID字段的兩個表之間建立父子關系

Dim Parent As DataColumn = OrderDataSet.Tables("Orders").Columns("OrderID")

Dim Child As DataColumn = OrderDataSet.Tables("Order Details").Columns("OrderID")

Dim OrderRelation As DataRelation = New DataRelation("OrderRelation", Parent, Child, False)

'為DataSet添加關系

OrderDataSet.Relations.Add(OrderRelation)

'把DataGrid綁定到Orders表

DataGrid1.DataSource = OrderDataSet.Tables("Orders").DefaultView

DataBind()

End Sub

Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound

e.Item.Cells(0).BackColor = System.Drawing.Color.Ivory

End Sub

End Class

    在HierarchicalDataGrid.aspx中,我們為DataGrid1建立模闆列,并把另外一個DataGrid嵌入到這個模闆列,父一級的DataGrid用來顯示主記錄,比如:訂單。子一級DataGrid用來顯示詳細資訊,比如:訂單的詳細資訊。我們這樣為子DataGrid動态指定資料源:

DataSource='<%# Ctype(Container.DataItem,DataRowView).CreateChildView("OrderRelation") %>'>

    上面這句就是實作顯示主次關系資料的關鍵。根據目前父一級記錄,DataRowView.CreateChildView利用前面建立的關系的名字作為參數獲得子記錄,并把它綁定到子DataGrid上。

    下面就是我們要顯示的ASPX頁面的代碼,HierarchicalDataGrid.aspx:

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="HierarchicalDataGrid.aspx.vb" Inherits="HierarchicalDataGrid.HierarchicalDataGrid" %>

<%@ Import namespace="System.Data"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<title>顯示主次關系資料的例子</title>

<meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0">

<meta name="CODE_LANGUAGE" content="Visual Basic 7.0">

<meta name="vs_defaultClientScript" content="JavaScript">

<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">

</HEAD>

<body>

<form id="FrmDataGrid" method="post" runat="server">

<P align="center">

<asp:DataGrid id="DataGrid1" BorderColor="#0099FF" runat="server" ShowHeader="False" Width="470px" CellPadding="0" CellSpacing="0" AutoGenerateColumns="False" BorderWidth="2px">

<Columns>

<asp:TemplateColumn>

<ItemTemplate>

<TABLE cellSpacing="0" cellPadding="0" width="100%" >

<TR>

<TD bgColor="#FF6600"><B>訂單号:

<%# DataBinder.Eval(Container.DataItem, "OrderID") %>

</B>

</TD>

</TR>

<TR>

<TD align="right">

<asp:DataGrid id=DataGrid2 runat="server" AutoGenerateColumns="False" BorderColor="#33FF33" DataKeyField="OrderID" DataSource='<%# Ctype(Container.DataItem,DataRowView).CreateChildView("OrderRelation") %>'>

<HeaderStyle Font-Bold="True" ForeColor="#CC0066" BackColor="#FFCCFF"></HeaderStyle>

<Columns>

<asp:BoundColumn Visible="False" DataField="OrderID" ReadOnly="True"></asp:BoundColumn>

<asp:TemplateColumn HeaderText="産品名稱">

<HeaderStyle Width="300px"></HeaderStyle>

<ItemTemplate>

<%# DataBinder.Eval(Container.DataItem, "ProductName") %>

</ItemTemplate>

</asp:TemplateColumn>

<asp:BoundColumn DataField="UnitPrice" HeaderText="單價"></asp:BoundColumn>

<asp:BoundColumn DataField="Quantity" HeaderText="數量"></asp:BoundColumn>

<asp:BoundColumn DataField="Discount" HeaderText="折扣"></asp:BoundColumn>

</Columns>

</asp:DataGrid></TD>

</TR>

</TABLE>

</ItemTemplate>

</asp:TemplateColumn>

</Columns>

</asp:DataGrid></P>

</form>

</body>

</HTML>

    在VS.NET裡建立名字為HierarchicalDataGrid的VB.NET ASPX應用程式,輸入上面的代碼,就可以看到下面的結果:

利用ASP.NET DataGrid顯示主次關系的資料(VB.NET)

繼續閱讀