亚洲AV无码乱码在线观看不卡|最新大伊香蕉精品视频在线|亚洲不卡av一区二区|国产美女无遮挡免费

登錄論壇 | 注冊(cè)會(huì)員 設(shè)為首頁(yè) | 收藏本站
當(dāng)前位置 : 首頁(yè)>軟件學(xué)院>程序開(kāi)發(fā)>ASP教程>正文
 
在DATAGRID中使用分類(lèi)標(biāo)題

http://www.yibo1263.com 2008-6-29 20:53:44  來(lái)源:本站  編輯:張賀兵
 
  在asp.net中,DATAGRID是使用頻率比較高的控件,而在日常應(yīng)用中,如何在DATAGRID中使用分類(lèi)標(biāo)題呢?

  什么是分類(lèi)標(biāo)題呢?舉個(gè)例子,我們?cè)谑褂肈ATAGRID時(shí),都以一定的順序來(lái)顯示有關(guān)的數(shù)據(jù),比如在使用ms sql server的Northwind數(shù)據(jù)庫(kù)時(shí),在product產(chǎn)品表中,每一個(gè)產(chǎn)品都是屬于一個(gè)類(lèi)別,這些類(lèi)別在category表中定義。那么我們可以按照category表中類(lèi)別的順序,在DATAGRID中顯示每個(gè)類(lèi)別有哪些產(chǎn)品。

  從上面的圖中,可以看出,在這個(gè)DATAGRID中,藍(lán)色的行標(biāo)題是一個(gè)分類(lèi)標(biāo)題,很明顯地指出商品所屬的類(lèi)別,分類(lèi)標(biāo)題以下的就是該分類(lèi)下的所有商品了。

  好吧,講了這么多,讓我們一步步來(lái)開(kāi)始設(shè)計(jì)咯。(下面的內(nèi)容假定各位都初步掌握了VS.NET的基本操作,有asp.net和VB.NET的初步知識(shí))。

  首先,我們建立一個(gè)名為subheading的工程,選用VB.NET。之后添加一個(gè)datagrid,并修改其html代碼如下:

  

  

  

   目的是在datagrid中設(shè)置綁定的幾列,注意,要把datagrid中AutoGenerateColumns 屬性設(shè)置為 False.之后,我們因?yàn)橐魂囈獙?xiě)ItemDataBound事件,所以繼續(xù)編輯代碼如下:

  

   ForeColor="Black" BackColor="White" CellPadding="3"

   GridLines="None" CellSpacing="1"

   OnItemDataBound="DataGrid1_ItemDataBound">

  之后我們?cè)倏聪氯绾螌?xiě)邏輯部分的代碼。其實(shí)做分類(lèi)標(biāo)題的過(guò)程很簡(jiǎn)單,過(guò)程為:   

  用SQL語(yǔ)句從數(shù)據(jù)庫(kù)讀取product表的數(shù)據(jù),之后放到dataset的默認(rèn)datatable中去,  

  然后檢查每一個(gè)產(chǎn)品所屬的類(lèi)別,如果發(fā)現(xiàn)某一個(gè)產(chǎn)品的類(lèi)別和前一條記錄中產(chǎn)品所屬的類(lèi)別不一樣的話(huà),那么就可以肯定當(dāng)前產(chǎn)品是屬于一個(gè)新的分類(lèi)了,就可以插入新的行,并且加以修飾,成為分類(lèi)標(biāo)題。   

  下面先看page_load()的代碼:

  Private Sub Page_Load(ByVal sender As System.Object, ByVale As System.EventArgs)

  Handles MyBase.Load

  Dim ConnectionString As String

  ConnectionString = "server=localhost;database=northwind;UID=sa"

  Dim CommandText As String = "Select CategoryName, ProductName, " amp; _

   "Cast(UnitPrice as varchar(50)) as UnitPrice, UnitsInStock " amp; _

   "from Products " amp; _

   " INNER JOIN Categories On " amp; _

   " Products.categoryID = Categories.CategoryID " amp; _

   "order by Products.categoryID"

   Dim myConnection As New SqlConnection(ConnectionString)

   Dim myCommand As New SqlDataAdapter(CommandText, myConnection)

   Dim ds As New DataSet()

   myCommand.Fill(ds)

   Dim curCat As String ‘指示當(dāng)前記錄中產(chǎn)品所屬的類(lèi)別

   Dim prevCat As String ‘指示上一條記錄中產(chǎn)品所屬的類(lèi)別

   Dim row As TableRow ‘要插入分類(lèi)標(biāo)題的行

   Dim i As Integer = 0 ‘要插入分類(lèi)標(biāo)題行的位置,用I表示

   '遍歷結(jié)果集,找出要插入分類(lèi)標(biāo)題的行

   Do While i <= ds.Tables(0).Rows.Count - 1

   curCat = ds.Tables(0).Rows(i).Item("CategoryName")

   If curCat <> prevCat Then

   ‘如果發(fā)現(xiàn)前后兩記錄的所屬類(lèi)別不一樣

   prevCat = curCat

   Dim shRow As DataRow = ds.Tables(0).NewRow

   shRow("ProductName") = ds.Tables(0).Rows(i).Item(0)

   ‘修改行的標(biāo)題為分類(lèi)標(biāo)題名

   shRow("UnitPrice") = "SubHead" ‘設(shè)置一個(gè)臨時(shí)的標(biāo)記

   ds.Tables(0).Rows.InsertAt(shRow, i) ‘插入新的分類(lèi)標(biāo)題行

   i += 1

   End If

   i += 1

   Loop

   DataGrid1.DataSource = ds

   DataGrid1.DataBind()

   End Sub

  在上面的page_load事件中,首先是用SQL語(yǔ)句,對(duì)product表和Category表進(jìn)行連接,得出的結(jié)果集是在Category表中每個(gè)類(lèi)別的所有產(chǎn)品,之后對(duì)結(jié)果集進(jìn)行遍歷,然后檢查每一個(gè)產(chǎn)品所屬的類(lèi)別,如果發(fā)現(xiàn)某一個(gè)產(chǎn)品的類(lèi)別和前一條記錄中產(chǎn)品所屬的類(lèi)別不一樣的話(huà),那么就可以肯定當(dāng)前產(chǎn)品是屬于一個(gè)新的分類(lèi)了,就可以插入新的行做為分類(lèi)標(biāo)題行,而在新插入的行中,我們寫(xiě)了一句 shRow("UnitPrice") = "SubHead",這是為什么呢?

  這其實(shí)只是一個(gè)臨時(shí)的標(biāo)記而已,因?yàn)樾虏迦氲姆诸?lèi)標(biāo)題行是和普通的行不同的,我們要設(shè)置其樣式,于是在其item_bound事件中,代碼如下:

  Private Sub DataGrid1_ItemDataBound(sender As Object, e As DataGridItemEventArgs)

   Select Case e.Item.ItemType

   Case ListItemType.AlternatingItem, ListItemType.Item

  ’如果發(fā)現(xiàn)是分類(lèi)標(biāo)題行的話(huà),則對(duì)其進(jìn)行格式化

  If e.Item.Cells(1).Text.Equals("SubHead") Then

  ’設(shè)置列寬

   'Set the cell to a ColSpan of 3

   e.Item.Cells(0).ColumnSpan = 3

  ‘合拼為一個(gè)新的分類(lèi)標(biāo)題行,移除其中的單元格

   e.Item.Cells.RemoveAt(2)

   e.Item.Cells.RemoveAt(1)

   e.Item.Cells(0).Attributes.Add("align", "Left")

   e.Item.Cells(0).Font.Bold = True

   e.Item.BackColor = Color.FromArgb(204,204,255)

   End If

  End Select

  End Sub

  最后,別忘記了Imports System.Data.SqlClient。

  本程序在win2000 server+vs.net 2002下通過(guò),也可以在vs.net 2003下運(yùn)行。
 
收藏】【打印】【進(jìn)入論壇
  相關(guān)文章:

 
 
 
 
最新文章

中關(guān)村艷照門(mén)女主角詳記錄高清組圖 
大連護(hù)士門(mén)大尺度艷照高清組圖
iPhone女孩微博爆紅 最寶貴東西換iPhon
反恐精英之父內(nèi)維爾:改變電腦游戲銷(xiāo)售
團(tuán)購(gòu)網(wǎng)站黎明之前:中國(guó)市場(chǎng)慘烈廝殺不
團(tuán)購(gòu)鼻祖Groupon中國(guó)揭秘:快與慢的商業(yè)
Spil Games發(fā)布新的品牌形象
1800配置一臺(tái)主機(jī) 不要顯示器
聯(lián)想V360筆記本模特寫(xiě)真
愛(ài)國(guó)者第四代移動(dòng)硬盤(pán)將面市、低電壓保

 
推薦文章
1
2
3
4
5
6
7
8
9
10
iPhone女孩微博爆紅 最寶貴東西換
大連護(hù)士門(mén)大尺度艷照高清組圖
中關(guān)村艷照門(mén)女主角詳記錄高清組
蘋(píng)果員工中毒門(mén)
宮如敏不雅照瘋傳 看張馨予韓一菲
深耕市場(chǎng) 永續(xù)經(jīng)營(yíng)——專(zhuān)訪百腦匯
優(yōu)派專(zhuān)業(yè)電子書(shū) 讓您回家旅途多姿
揭曉百萬(wàn)大獎(jiǎng)三星bada魅力綻放中
大明龍權(quán)“江湖英雄會(huì)”全國(guó)PK大
永恒之塔校園達(dá)人挑戰(zhàn)賽完美落幕
八卦圖解 More>>
iPhone女孩微博爆紅 最寶貴東西換 大連護(hù)士門(mén)大尺度艷照高清組圖
中關(guān)村艷照門(mén)女主角詳記錄高清組 宮如敏不雅照瘋傳 看張馨予韓一菲