国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

在DATAGRID中使用分類標題

2024-07-21 02:30:01
字體:
來源:轉載
供稿:網友

  在asp.net中,datagrid是使用頻率比較高的控件,而在日常應用中,如何在datagrid中使用分類標題呢?

  什么是分類標題呢?舉個例子,我們在使用datagrid時,都以一定的順序來顯示有關的數據,比如在使用ms sql server的northwind數據庫時,在product產品表中,每一個產品都是屬于一個類別,這些類別在category表中定義。那么我們可以按照category表中類別的順序,在datagrid中顯示每個類別有哪些產品。

  從上面的圖中,可以看出,在這個datagrid中,藍色的行標題是一個分類標題,很明顯地指出商品所屬的類別,分類標題以下的就是該分類下的所有商品了。

  好吧,講了這么多,讓我們一步步來開始設計咯。(下面的內容假定各位都初步掌握了vs.net的基本操作,有asp.net和vb.net的初步知識)。

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

<?xml:namespace prefix = asp /><asp:boundcolumn datafield="unitsinstock" headertext="stock level"></asp:boundcolumn>

   目的是在datagrid中設置綁定的幾列,注意,要把datagrid中autogeneratecolumns 屬性設置為 false.之后,我們因為一陣要寫itemdatabound事件,所以繼續編輯代碼如下:

   forecolor="black" backcolor="white" cellpadding="3"

   gridlines="none" cellspacing="1"

   onitemdatabound="datagrid1_itemdatabound">

  之后我們再看下如何寫邏輯部分的代碼。其實做分類標題的過程很簡單,過程為:   

  用sql語句從數據庫讀取product表的數據,之后放到dataset的默認datatable中去,  

  然后檢查每一個產品所屬的類別,如果發現某一個產品的類別和前一條記錄中產品所屬的類別不一樣的話,那么就可以肯定當前產品是屬于一個新的分類了,就可以插入新的行,并且加以修飾,成為分類標題。   

  下面先看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, " & _

   "cast(unitprice as varchar(50)) as unitprice, unitsinstock " & _

   "from products " & _

   " inner join categories on " & _

   " products.categoryid = categories.categoryid " & _

   "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 ‘指示當前記錄中產品所屬的類別

   dim prevcat as string ‘指示上一條記錄中產品所屬的類別

   dim row as tablerow ‘要插入分類標題的行

   dim i as integer = 0 ‘要插入分類標題行的位置,用i表示

   '遍歷結果集,找出要插入分類標題的行

   do while i <= ds.tables(0).rows.count - 1

   curcat = ds.tables(0).rows(i).item("categoryname")

   if curcat <> prevcat then

   ‘如果發現前后兩記錄的所屬類別不一樣

   prevcat = curcat

   dim shrow as datarow = ds.tables(0).newrow

   shrow("productname") = ds.tables(0).rows(i).item(0)

   ‘修改行的標題為分類標題名

   shrow("unitprice") = "subhead" ‘設置一個臨時的標記

   ds.tables(0).rows.insertat(shrow, i) ‘插入新的分類標題行

   i += 1

   end if

   i += 1

   loop

   datagrid1.datasource = ds

   datagrid1.databind()

   end sub

  在上面的page_load事件中,首先是用sql語句,對product表和category表進行連接,得出的結果集是在category表中每個類別的所有產品,之后對結果集進行遍歷,然后檢查每一個產品所屬的類別,如果發現某一個產品的類別和前一條記錄中產品所屬的類別不一樣的話,那么就可以肯定當前產品是屬于一個新的分類了,就可以插入新的行做為分類標題行,而在新插入的行中,我們寫了一句 shrow("unitprice") = "subhead",這是為什么呢?

  這其實只是一個臨時的標記而已,因為新插入的分類標題行是和普通的行不同的,我們要設置其樣式,于是在其item_bound事件中,代碼如下:

  private sub datagrid1_itemdatabound(sender as object, e as datagriditemeventargs)

   select case e.item.itemtype

   case listitemtype.alternatingitem, listitemtype.item

  ’如果發現是分類標題行的話,則對其進行格式化

  if e.item.cells(1).text.equals("subhead") then

  ’設置列寬

   'set the cell to a colspan of 3

   e.item.cells(0).columnspan = 3

  ‘合拼為一個新的分類標題行,移除其中的單元格

   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下通過,也可以在vs.net 2003下運行。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 略阳县| 鹤壁市| 凌源市| 大埔县| 佛坪县| 保德县| 白水县| 孝义市| 卫辉市| 哈尔滨市| 淳安县| 汉寿县| 鄄城县| 瑞安市| 军事| 阿城市| 武宣县| 邹平县| 安溪县| 焦作市| 渝中区| 远安县| 家居| 崇义县| 淄博市| 龙海市| 丰城市| 宜州市| 重庆市| 湘潭市| 阳信县| 扬州市| 博野县| 神池县| 博客| 太仓市| 临洮县| 曲沃县| 临安市| 宣武区| 饶河县|