2013年10月23日 星期三

[原則問題?] 100%用上ASP.NET控制項,才是真正的ASP.NET網頁?

這是我的文章備份,原文請看:http://www.dotblogs.com.tw/mis2000lab/archive/2013/09/13/118397.aspx

[原則問題?] 100%用上ASP.NET控制項,才是真正的ASP.NET網頁?



原則問題? 100%用上ASP.NET控制項,才是真正的ASP.NET網頁?
 
 
這是我上課有時會講的例子
剛好看見論壇有人討論類似的問題
 
**************************************************************************
以下是我個人想法,或是說我們團隊的共識。不見得一定適合您
***************************************************************************
 
有個朋友想要設計跟微軟msdn網站一樣的架構
例如:
    上方  是公司大標題
    左邊  有樹狀圖(TreeView / 菜單等等)
    右邊  的網頁是「主要內容」。
 
當然,他用了ASP.NET的主版頁面(MasterPage)
 
但是用了以後,發現有些問題或是某些網頁內的控制項更不好操作?
例如,你要用更多的 .FindControl()方法,一層一層挖下去....
 
這篇文章的解法很好,請大家參考:
 
 
您也可以發現:在我的書本裡面,上集我沒有介紹 Login控制項、導覽列、MasterPage
我把他們放在下集才講。
 
因為我認為:看完上集的技巧(夠熟練!能變通!)您可以自己寫出「下集」那些範例
 
上述三種控制項,我都有替代方法能作(或許我比較懶惰吧?我懶得學新東西)
 
但我想說的重點是:
 
第一,不要看了人家的成果(畫面),去反推(猜測)對方是怎麼湊出來的?
            然後「硬用」ASP.NET控制項去湊?
 
舉例來說,相同的畫面(動態產生問卷、產生表單),我可以用 Panel做(障眼法,但客戶也覺得OK)
我也有能力用PlaceHolder完成,真正的在程式執行期間,動態加入控制項(範例已經收納在書本下集)
 
但....客戶瞭解嗎?用了深入的技術,老闆會給我加薪嗎?
日後出了問題,接手的人要花多少時間去改? 
我現在考慮的問題,會比較多(可能我不是現役Programmer,我現在最擔心 專案進度 與 人力銜接 的問題.....)
 
 
第二,並非.....100%用光了(全用上) ASP.NET控制項,才是「真正」的ASP.NET網頁。
 
舉例來說,我們公司的系統畫面,
左邊的樹狀結構(菜單 / TreeView)仍是以前用 JavaScript寫出來的
右邊的主畫面,仍是用傳統HTML網頁的頁框(frameset)來呈現畫面
 
為什麼要這麼做呢?
因為其他的案子,PHP或舊版ASP網頁,都這樣用。保持一致性的話,出了問題,很多人都熟悉能改。
 
另外,我們的系統從來沒用過 Login控制項,因為有一份共用的會員資料庫(存放帳號、密碼的地方),所有網站都使用相同架構
所以仍以 Session來管理會員登入、權限
(你說我食古不化也行.....因為這不是我規定的,有點約定俗成)
 
 
面對不同情況的時候,有不同的變化
 
時間緊迫的時候,常常改了就上線。
 
沒有時間加入新技術、或是去用「不熟悉」的新控制項
 
因為客戶的上線期限(Dead Line)絕對不會後退一步
 
 
除了技術的新舊以外,「滿足客戶需求」對我們團隊來說,會更重要。
因為這代表可以結案、收到貨款。
 
 
我最不能忍受的是這種人:
今天下午五點要寫完(你也認列了、確定可以交付),但時間到了,寫不出來。
當初評估的結果,這不難,所以把時間壓在今天下午五點。
 
時間到了,卻沒交!無法給客戶測試
 
原因呢?「我會寫,也寫得出來。.....但我覺得這方法很蠢,我不想用這方法」
             「我想用全新的XX控制項來做,所以還沒寫好。.....如果用以前的作法,我早就交了」
 
一兩次,我還會客氣地說,你很認真!那要趕緊做完,不要拖下去
 
次數多了,各位看官會怎麼想?
            我只看到你 Delay、重複 Delay.....................
 
 
把情況改一下,那就不一樣。
 
先完成了工作,準時交付。客戶驗收與測試都OK。
 
   但您發現有些地方可以改進,也花時間去改進
 
   或是發現新技術、新控制項很讚!  後續改了、添加進去....果然更棒!
   然後您推廣這技術,讓(團隊)大家都會用....
 
   不得了!這樣的人,我一定要大力讚揚,請老闆表揚與加薪的!
 
   這絕對是大家學習的模範,絕對是公司死命保留的關鍵人才!
 
 
 
懂了嗎?不同的情況下,有不同的作法
 
要研究、要表現自己、要精進技術....都是自己的努力、自己的時間
 
不能以此為藉口,拖累大家。
甚至連自己「分內的工作」都交不出來
 
 
 
有限的時間內,如何達到自己、團隊、客戶三者的最佳平衡?最大滿意度?
是很重要的事情
 
想通了,海闊天空(技術,為我所用!)
想不開,就是鑽牛角尖(技術,困死自己)
 
 
這些抉擇  沒  有  對  錯。             
 
不同的選擇,造就不同的結果
 
 
不過要提醒您:「時間」從來不等人,
                               ......不管是自己年輕時的 "學習"時間,或是 "專案結束"的時間
 
**************************************************************************
以上是我個人想法,或是說我們團隊的共識。不見得一定適合您
***************************************************************************
 
 
 
我想跟初學者(新手、菜鳥)說:
 
     您可以把 100%的 ASP.NET控制項全部學會,然才上場作戰。
 
     也可以只會最關鍵的 20%,然後做出 80%功能(這就是著名的「20 / 80」法則
 
「邊學邊作、逐步成長」會是比較平順的作法,而且實力養成會比較扎實
 
 
但一個初學者,面對一項需求,
如果常常覺得「這一定是我哪個控制項不會用,所以做不出來」
 
我想:您應該永遠都是菜鳥
 
 
如果有一名廚師,面對新的菜色,永遠只想到「我一定忘了加哪個"現成的"調味料,所以做不出來」
而不是用現有的技術、食材、加一點巧思去實作它?
 
我想這種廚師,只能去連鎖店上班。
      A菜色  就是  A原料+A醬汁(公司調好的),我只是混在一起下鍋煮熟
      事實上,很多連鎖餐廳的新手廚師(因為薪資便宜)都是這樣的水準。
 
 
 
***************************************************************************
雖然我們團隊愛用舊技術(偷懶、或是容易找人維護)
但也可能犯了下面的錯誤,
 
這個小故事說明了「約定俗成」也會是錯誤:
 
媳婦煎魚時,習慣把頭尾去掉(切掉)
 
婆婆問:為什麼要這樣呢?
媳婦說:我不知道,我看我媽媽都這樣做
 
回娘家問了媽媽,媽媽也說是跟我媽媽(外婆)學的
 
又去找了外婆問清楚
 
外婆笑了,說:「以前的鍋子小,所以煎一條魚要把頭尾去掉.............你們現在應該不會這樣做吧?」
 
 
 
講的有點離題............
 
反正變化改不上計畫
 
         原則...也常常會變動啊
 
 
看到這裡,您對於「100%用上ASP.NET控制項,才是真正的ASP.NET網頁」的感覺是什麼呢?
 
 
 
職場有趣的地方,就是隨時有新鮮事
 
到了最後,真正讓我有價值的,往往是我想不到的「經驗談」
 
 
 
 
 
 
******* KUSO 時間到了 **************************************************************
 
我們來看看最會改變原則的這位先生吧!
 
 
 





從這篇新聞稿(聯合報喔!)裡面,終於說出了真心話
 
但也有委員堅持,王金平「沒有 幫賴素如關說,沒有 幫林益世關說,沒有 幫李朝卿關說,卻幫柯建銘關說」
證明他沒有以國民黨立委自居,確實應該嚴處
 

點選圖片,可以聽到馬大總統當年(2006/6/18)的玉音放送
看看他是怎麼說,民調低於18%就該罷免!
 
馬英九說:人民以頭家的身份,把權力拿回來就是「罷免」!
所以罷免在民主政治,是跟選舉一樣普通的事情。
 
罷免,不需要這個總統犯罪
犯罪與罷免沒有一定關係
 
即使是 沒有犯罪
只要他無能,他做不好
他的滿意度調到18%(Bumbler, the Ma更低,低到13%....除掉王金平,馬變成11%)
 
表示人民已經不信任他
表示人民已經不尊敬他
 
 
可以把權力要回來.....對不對?
(台下民眾高呼:對!)
 
 
民主政治,就是民意政治與責任政治
 
當民意已經不支持你
你的政治責任沒有辦法再承擔的時候
 
你就應該知道自己下台
不要等人民來罷免你
 
一個人要有羞恥
人家才會尊敬
 
一個人要有責任感
別人才會同情........  (馬總統,被自己說過的話打臉,很痛吧!!!)
          
          圖片來源 https://www.facebook.com/MaYingjeou19748




這篇文章當結尾,超讚的!
 



馬先生,你臉皮厚  不會痛,但我找資料讓你打臉,連我都羞愧啦................
...........................................................................................................................................
2. 大環境不好
2004/3/14  馬英九 說,四年一次的總統大選就是檢驗政績的時候,做不好下台是天經地義的事。

  馬英九也以重砲批評陳水扁總統不能將經濟不好的責任全部推給國際景氣不佳。

  他說,總統就是要帶領國民衝過危機
           如果把什麼都推給大環境,人民選這樣的總統有什麼用?


...........................................................................................................................................
2007/10/13  馬英九:是那個笨蛋把經擠搞成現在這個樣子
依照上面的新聞,國際認證的「馬幫伯」敢提返聯公投嗎?
國家尊嚴?主體性??..........


這個人 (this man)又說出心裡話了 ----- 說話不算話,才是正常

馬英九:反正是選舉嘛,說什麼都行啊。 - YouTube

www.youtube.com/watch?v=I2pfNecAzIw2011年10月2日 - 5 秒 - 上傳者:jimmycdchen
這樣的咖笑你也選給他,瞎不瞎啊?? CC-by TVBS-N.

20101218馬英九:聽周錫瑋治水政見 還以為選舉說說而已 TVBSN ...

www.youtube.com/watch?v=tghjC1OqG_Y2010年12月28日 - 2 分鐘 - 上傳者:long561
原來競選的政見是「說什麼都行啦」,馬總統這是什麼心態?! ... 詐騙集團首領 馬英九看待633 就是這種心態: 哎呀~ 反正是選舉啦~ 說什麼都行啦~ ...

文章主題 : 全球年度最誠實的政客
[摘 錄] -- 有關台北縣長周錫瑋「畢業展」的報導; 在只剩7天的任期時,周縣長陪同馬英九先生一起在12月18日參加新莊中港大排副都心段河廊完工的啟用典禮,以及縣府在當晚所舉辦的「聖誕新北感恩晚 會」。
馬英九不斷稱讚周錫瑋的四年施政,除了與周縣長上演愛的抱抱以外,馬先生還說︰五年前,幫周錫瑋助選時,競選政見 包括新莊中港大排改建成可以遊憩、排放汙水的水道,當時只是想反正是選舉,說什麼都行,沒有特別注意。不過當選總統之後,周錫瑋跟他說,中港大排的規劃,已經開始執行。

馬英九的致詞內容獲得幾家媒體的刊載,包括中時電子報、中廣新聞、yam天空新聞 、自由時報、以及台灣日報新聞網。至於NOWnews、聯合新聞網、公視新聞、和臺灣新浪網,對此發言之(隻)字不提,只強調馬英九對周錫瑋縣長滿滿的稱讚: 「有遠見」、「前所未有的成績」、「新莊新妝,美夢成真」,還有「錫瑋兄,有你真好!」

「反正是選舉,說什麼都行」,這種話竟然讓馬先生在公開場合說出口了。我們實在應該給他拍拍手鼓勵一番。因為,這句話和當年馬先生對原住民所說的「我把你當人看,我要好好教育你」,是級數一樣、並駕齊驅的真心話。真的,找遍全世界也很難看到像馬英九這麼誠實的政客。.....詳見全文


[NPOI 1.2.4版]凍結窗格(凍結、鎖定)& 設定儲存格「格式」

這是我的網頁備份,原文請看  http://www.dotblogs.com.tw/mis2000lab/archive/2013/10/17/npoi_freeze_window_excel_2003.aspx

[NPOI 1.2.4版]凍結窗格(凍結、鎖定)& 設定儲存格「格式」




請先確認您使用的 NPOI版本與我相同。
因版本不同,可能有程式碼的差異。

資料來源:
 
Creates a split (freezepane). Any existing freezepane or split pane is overwritten.
If both colSplit and rowSplit are zero then the existing freeze pane is removed
 
Specified by:
    createFreezePane in interface Sheet
Parameters:
    colSplit - Horizonatal position of split.
    rowSplit - Vertical position of split.
 
 
 
 

下面文章是 ASP.NET專題實務(松崗出版)上集 Ch.11的補充範例

第一張圖片最清楚,當 Excel 2003要凍結第一列、第一格
其實您是點選第二列、第二格之後,再按下「凍結窗格」

NPOI程式碼裡面的 .CreatFreezePane(1, 1)可以解讀成「鎖定(凍結)第一列、第一格」。
        (這種說法,跟我們的想法完全一致。)
但電腦從 "零"算起的,這樣解釋就跟 Excel操作完全雷同了。

自己寫程式實驗一下就會懂,
不要只是看,要動手做








[習題].FindControl()的習題 -- GridView 跨網頁 修改(編輯)

這是我的文章備份,原文請看:http://www.dotblogs.com.tw/mis2000lab/archive/2013/10/15/gridview_crosspage_posting_edit_update.aspx

[習題].FindControl()的習題 -- GridView 跨網頁 修改(編輯)


有一個 GridView,按下按鈕之後,會去另一個網頁進行修改。
      GridView先轉成樣板,然後把 Label改成 TextBox並且重新「設定DataBinding」
      詳見書本上集 Ch.8

在新的網頁上,修改之後,把資料傳到「原本網頁」
這就是「跨網頁張貼」、「跨網頁公布」的技巧。
詳見書本上集 Ch.15
其實最簡單的作法,就是修改後,立即寫進DB
如此一來,Gridview只要重新 DataBinding即可。

但我不清楚為何搞到這麼複雜,「只修改畫面上的TextBox,不寫進資料庫???」


==============================================================================
這個範例使用到的知識,如下:
 
1. 跨網頁公布、跨網頁張貼
    詳見書本上集,Ch.15
 
 
2. 大型控制項裡面的「按鈕」 CommandName 屬性與 RowCommand事件(或 ItemCommand事件)
    詳見書本上集 Ch.10
 
 
3. 大型控制項的「流水號」
 
 
這三招組合起來,範例 GridView_CrossPage_Posting_0.aspx 就做得到:
01protected void Page_Load(object sender, EventArgs e)
02{
03    if (Page.PreviousPage != null)
04    {
05        if (PreviousPage.IsCrossPagePostBack)
06        {  //跨網頁張貼,才能運作下面的程式碼。      
07            int j = Convert.ToInt32(Session["RowIndex"]);
08 
09            TextBox TB_A = (TextBox)GridView1.Rows[j].FindControl("TextBox_test_time");
10            TextBox PrevPageTB1 = (TextBox)PreviousPage.FindControl("TextBox1");
11            TB_A.Text = PrevPageTB1.Text;
12 
13            TextBox TB_B = (TextBox)GridView1.Rows[j].FindControl("TextBox_title");
14            TextBox PrevPageTB2 = (TextBox)PreviousPage.FindControl("TextBox2");
15            TB_B.Text = PrevPageTB2.Text;
16        }
17    }
18}

 
 
裡面共有三組範例,兩支檔案為一組。
 
第一組,範例1~2。使用傳統Http Get方式來傳值。請注意!會有SQL Injection攻擊的疑慮。難易度:低!
第二組,範例3~4。跨網頁張貼(CrossPage-Posting)搭配 Session
第三組,範例5~6。直接使用Session,最簡便!難易度:低!
 
 
 
==============================================================================
 
完成上面三個步驟就行了,都是書本上集的技巧
 
但我覺得搭配下面這一招,才能連貫起來!
 
 
4. GridView 批次 修改(編輯)多列、批次更新
 
    
 
 
 
.......................以下是廣告........................................................................................
 
 
我的書、我的課程,絕對沒有太多招數
 
都是用最基本的技巧
組合成各種變化。
 
如同詠春拳,三個套路,
排列組合、變化萬千
 
王家衛的電影,一代宗師,台詞如下:
 
勇哥:我打雜家的。 
 
葉問:你可真夠雜的。 
 
勇哥:雜又怎麼樣?能打不就行啦。
          人家宮家六十四手千變萬化,你們詠春就三板斧。攤、膀、伏,你怎麼打啊? 
 
葉問:三板斧就夠你受的了. 
 
 
 
 
 
與其到處  Copy範例、到處抄襲程式碼(找到了也改不動)
 
為什麼不一次學好、學清楚?
 
然後讓自己有生產力呢?
(你學了一百招,但上了戰場,一招都使不出來?)
(客戶的要求,沒有一個你能自己做到?還是上網逐一發問、抄抄改改?)
 
 
為什麼人家可以千變萬化?
 
我只能到處拼拼湊湊?卻還天天加班、做不完?最後還是迷迷糊糊?
 
 
 
 
   如何一以貫之
         如何啟動「輕輕鬆鬆的自我學習之道」?
 
 
讓我告訴你,
一個沒有大型補習班招牌、沒有關鍵字廣告的書籍與課程
 
 
在時局這麼亂、經濟與工作越來越蕭條的  Bumbler 無能年代
 
為何所有補習班的 ASP.NET課程都開不成、招不到學生
 
我的課程,班班額滿,欲罷不能.............縱貫這三四年 全台灣 的 ASP.NET入門教學