2015年8月8日 星期六

C# 心得:Dropdownlist itemtext 階層化



如圖,由於資料本身是類是樹狀的結構,為了怕整個資料混淆,有必要將課程˙類別做階層分類。一開始想法很簡單 以為只要在 itemtext 加入   就可以了,沒想到 dropdownlist 會自動去空白,而且無法呈現樹狀架構模式。

找了網路資料後,發現是要從 資料庫下手

DECLARE @tmp_branch TABLE(Branchid char(5),  Level int, Sorting varchar(20)) 
DECLARE @Rstep int 

SET @Rstep=0 
INSERT @tmp_branch

--由資料表將樹狀資料讀出
-- SEQ int 課程代號  ,   PQS int   父項目代號  ,root 項目設定為 0  
-- TEXT1 課程名稱

 SELECT    SEQ , @Rstep,  SEQ  FROM    CONFIG
 WHERE    PQS = 0  WHILE @@ROWCOUNT > 0  
 BEGIN    SET @Rstep = @Rstep + 1 

INSERT @tmp_branch SELECT CONVERT(VARCHAR, a.SEQ) ,@Rstep,b.Sorting+ CONVERT(VARCHAR,a.SEQ)   FROM CONFIG  a,@tmp_branch b  
WHERE a.PQS=b.Branchid       AND b.Level=@Rstep - 1 

END 

--再將資料讀出

 SELECT SPACE(b.Level*3) + '{0} ' +a.TEXT1 AS  TEXT1,   b.Branchid AS SEQ 
 FROM CONFIG  a,@tmp_branch b 
 WHERE a.SEQ=b.Branchid   PQS <> 1 
 ORDER BY b.Sorting 

然後在 dropdownlist bind 時 針對 itemtext 加入 HttpUtility.HtmlDecode 即可


ListItem items = new ListItem();

items.Text = dt1.Rows[i]["TEXT1"].ToString().Replace(" ", HttpUtility.HtmlDecode("&nbsp;"));


C# framework 4.0 
sql server 2005

搞定收工