2015年10月29日 星期四

[.net]Gridview 合併標題的處理方式(跨行、跨列)

工作上遇到需要將gridview的欄位合併
但並非資料內容合併,是gridview的表題

網路上找到的幾乎都是資料內容合併的方式
因此決定稍微整理一下最後做出來的結果,留個紀錄

首先整理一下gridview的一些事件

參考來源 : https://msdn.microsoft.com/zh-tw/library/hf8xwy0t.aspx
RowDataBound=>資料列繫結至 GridView 控制項中的資料時發生

RowCreated=>建立 GridView 控制項中的資料列時發生

這兩個事件都是需要在有資料的情況下才會觸發的
相較之下比較常用的為RowDataBound,處理資料欄位的binding
而RowCreated會發生在RowDataBound執行前,兩種都是一筆一筆去執行
意思就是若今天gridview都沒有資料,裡面的調正都不會呈現在web網頁上


若要改變gridview的格式,以VS的工具是做不到的
需要針對這些事件去做調整

再來記錄一下GridViewRow row.RowType的幾個類別
DataControlRowType.Footer =>表尾
DataControlRowType.Header=>表頭
DataControlRowType.DataRow=>資料的row

因此,就看需求需要調整表尾還是表頭或是資料
依序加入判斷
 GridViewRow row = e.Row;

            if (row.RowType == DataControlRowType.DataRow)
//...
          if (row.RowType == DataControlRowType.Header)
//...
          if (row.RowType == DataControlRowType.Footer )
//...

回到正題,今天遇到的狀況是改變標題列
當然我後來也是請求google好不容易才找到下列的參考文章(1)
http://adamschen9921.pixnet.net/blog/post/92005651

根據裡面的敘述大概就可以完成改變標題了
but 我需要的表題其實應該要長這樣



除了跨行之外,我還需要將標題一和標題二的上下row跨行阿
再找上下row合併的有發現幾篇不錯的參考文章(2)

但是這些看起來都是針對資料列去做調整
我需要的是標題要合併
有試過裡面的方式但發現還是沒有用

因此最後決定使用有點土法煉鋼的方法

原始的gridview設定為

(圖一)

step1.
根據我前面的參考文章(1),會先針對目前的row.Cells繼續編號
在此之前要先將(圖一)的標題一和標題二刪除

 tcc.Remove(tcc[0]);
 tcc.Remove(tcc[0]);

為什麼都是tcc[0]?因為對於Gridview來說,刪除一個欄位編號會重編
所以對於這個CASE來說都是刪除最前面的標題


step2.

   intcount = intcount - 2;

 for (int i = 0; i <= intcount - 1; i++)
      {
      tcc.Add(tcc[0]);
       }
執行重新編號後(注意intcount 需要配合刪減長度,意即你remove幾個就要所小幾個長度)
紅色部分為我新增加的,新增加的經過重新排列後如下圖
黃色標題六會因為紅色的標題六rowspan=2所以被擠到後面,這也正是我要的結果


step3.
再來同樣的,合併完需要將多餘標題六的刪除
但標題六為我們合併過後的最後面
 tcc.Remove(tcc[6]);

假如需要刪除的有兩個標題則為
 tcc.Remove(tcc[6]);
 tcc.Remove(tcc[5]);
//....


這樣就完成表格合併的問題了
因為這個例子的欄位比較少,所以會比較容易看出來
但實際上遇到的是十幾個欄位的時候
在測試驗證過程還蠻困難的
所以最後才採用這個比較直觀的方式去做
但相信應該還有更好的方式來處理這類的問題

若有各位大大們有更好的方式再麻煩指教了











2015年10月15日 星期四

[.NET]TAB鍵和AutoPostBack搭配的關係

最近決定再把.NET的基礎拿來翻一翻了
今天再用textbox的練習(我知道很基本...)

忽然想到以前案子常用的tab鍵點下後,游標往後移的例子
大家都知道可以利用tabindex來調整順序

但今天剛好將三個textbox順序訂好了
但發現怎麼換,都會從瀏覽器開始(簡單說就是跑掉了)

找了一下,網路很多都是將tab功能換成enter的例子
想了一下發現其實很簡單
只是因為AutoPostBack都被我設成了true
AutoPostBack的意思是物件內的內容有任何異動,自動完成submit動作
所以在我點選tab時,web會認為是submit的行為,當然tabindex就從瀏覽器開始算了


所以若有表單需要有按鍵可以順序的功能
切記AutoPostBack不能亂設定啊!!!

感覺超基本,但還是需要想一下才會發現
筆記一下

[.net]Windows Server 2012 R2 安裝.net 3.5

最近剛換工作
電腦需要安裝vs 2005 ,vs 2008 及vs2010
但MIS幫我電腦裝的是Windows Server 2012 R2 
除了確定2005無法裝之外,發現2008也會有問題
後來上網找了之後,原來在安裝Windows Server 2012 R2 時
並不會主動裝.net 35,導致在安裝vs 2008 會有問題
因此需要再將安裝光碟放進去,主要是需要安裝包裡面的sources\sxs\

所以需要將光碟檔裡面的sources\sxs\整個複製到電腦路徑的位置

再使用以下方法執行佈署
佈署的方式可參考以下內容:

https://support.microsoft.com/zh-tw/kb/2734782

方法四或方法三
筆記一下