無意間看到這支公益廣告,真的是看過之後會令人思考的一隻廣告
用不同的角度看自己過的生活,會別有一番滋味.
2008年6月26日 星期四
2008年6月20日 星期五
GridView 顯示小計及總計
ASP.NET2.0之後新增的GridView的確非常的好用,不過在頁面的靈活度表現上,常常會需要大家多花點心思去設計還有修改,當然所有Table做得到的他都一定做得到,畢竟GridView最後產生的結果也是Html的Table Tag,由於最近收到使用GridView來製做內含頁小計以及總計的顯示方法,記錄下來跟大家分享一下
需要顯示的結果
客戶 客戶編號 購買數量 百分比
Andy 0001 5 50%
Bill 0002 3 30%
Ivan 0004 2 20%
小計 10 100%
總計 10 100%
先來說明一下做法
GridView 基本上分三種資料顯示的區塊"Header、Data、Footer"
這次為了要做到我所要的功能就必須在Footer的部分來做手腳
先給大家看一下完成的結果


詳細程式碼如下:
1.新增資料庫並使用我附註所列的Sql語法新增Table及資料
2.編寫RowDataBound事件
注意下面程式碼sum1,sum2必須宣告在Global並於Footer處理結束時將兩個數值重新設定為0,避免計算有問題,我這邊是使用int型態,可以根據要精算的小數點位數更改為Double來處理,相關StoredProcedure回傳資料也要記得同時修改
3.編寫PreRender事件
附註:
sql語法
Stored Procedure
需要顯示的結果
客戶 客戶編號 購買數量 百分比
Andy 0001 5 50%
Bill 0002 3 30%
Ivan 0004 2 20%
小計 10 100%
總計 10 100%
先來說明一下做法
GridView 基本上分三種資料顯示的區塊"Header、Data、Footer"
這次為了要做到我所要的功能就必須在Footer的部分來做手腳
先給大家看一下完成的結果


詳細程式碼如下:
1.新增資料庫並使用我附註所列的Sql語法新增Table及資料
2.編寫RowDataBound事件
注意下面程式碼sum1,sum2必須宣告在Global並於Footer處理結束時將兩個數值重新設定為0,避免計算有問題,我這邊是使用int型態,可以根據要精算的小數點位數更改為Double來處理,相關StoredProcedure回傳資料也要記得同時修改
switch (e.Row.RowType)
{
case DataControlRowType.DataRow:
DataRowView Row = (DataRowView)e.Row.DataItem;
sum1 += Convert.ToInt32(Row[2].ToString());
sum2 += Convert.ToInt32(Row[3].ToString());
e.Row.Cells[3].Text = Row[3].ToString() + "%";
break;
case DataControlRowType.Footer:
e.Row.Cells[0].Text = "小計";
e.Row.Cells[2].Text = sum1.ToString();
e.Row.Cells[3].Text = sum2.ToString() + "%";
sum1=0;
sum2=0;
break;
default:
break;
}
3.編寫PreRender事件
//新增Footer
GridViewRow footer = new GridViewRow(-1, -1, DataControlRowType.Footer, DataControlRowState.Normal);
TableCell dtc0 = new TableCell();
TableCell dtc1 = new TableCell();
TableCell dtc2 = new TableCell();
TableCell dtc3 = new TableCell();
DataTable dt = new DataTable();
DataView dv = new DataView();
int iCount = 0;
int iPercent = 0;
dv = (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty); //Get DataView
dt = dv.ToTable();
iCount = Convert.ToInt32(dt.Compute("sum(Count)", ""));
iPercent = Convert.ToInt32(dt.Compute("sum(Percent)", ""));
dtc0.Text = "總計";
dtc1.Text = " ";
dtc2.Text = iCount.ToString();
dtc3.Text = iPercent.ToString() + "%";
footer.Controls.Add(dtc0);
footer.Controls.Add(dtc1);
footer.Controls.Add(dtc2);
footer.Controls.Add(dtc3);
GridView1.Controls[0].Controls.AddAt(GridView1.Controls[0].Controls.Count - 1, footer);
附註:
sql語法
--新增Table
CREATE TABLE [dbo].[Orders](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Product] [varchar](10) NOT NULL,
[Personal_ID] [varchar](10) NOT NULL,
[Personal_Name] [varchar](10) NOT NULL,
[Purchase_Date] [datetime] NOT NULL,
CONSTRAINT [PK_Order] PRIMARY KEY CLUSTERED
(
[ID] ASC,
[Product] ASC
) ON [PRIMARY]
) ON [PRIMARY]
-----------------------------------------------------
--新增資料
insert into Orders(Product,Personal_Name,Personal_ID,Purchase_Date)
values('Wii','Andy','0001','2008/06/19')
insert into Orders(Product,Personal_Name,Personal_ID,Purchase_Date)
values('PSP','Andy','0001','2008/06/19')
insert into Orders(Product,Personal_Name,Personal_ID,Purchase_Date)
values('NDSL','Andy','0001','2008/06/19')
insert into Orders(Product,Personal_Name,Personal_ID,Purchase_Date)
values('XBOX','Andy','0001','2008/06/19')
insert into Orders(Product,Personal_Name,Personal_ID,Purchase_Date)
values('PS3','Andy','0001','2008/06/19')
insert into Orders(Product,Personal_Name,Personal_ID,Purchase_Date)
values('Wii','Bill','0002','2008/06/19')
insert into Orders(Product,Personal_Name,Personal_ID,Purchase_Date)
values('PSP','Bill','0002','2008/06/19')
insert into Orders(Product,Personal_Name,Personal_ID,Purchase_Date)
values('NDSL','Jay','0003','2008/06/19')
insert into Orders(Product,Personal_Name,Personal_ID,Purchase_Date)
values('XBOX','Jay','0003','2008/06/19')
insert into Orders(Product,Personal_Name,Personal_ID,Purchase_Date)
values('PS3','Jay','0003','2008/06/19')
insert into Orders(Product,Personal_Name,Personal_ID,Purchase_Date)
values('Wii','Ivan','0004','2008/06/19')
insert into Orders(Product,Personal_Name,Personal_ID,Purchase_Date)
values('PSP','Ivan','0004','2008/06/19')
insert into Orders(Product,Personal_Name,Personal_ID,Purchase_Date)
values('NDSL','Ivan','0004','2008/06/19')
insert into Orders(Product,Personal_Name,Personal_ID,Purchase_Date)
values('XBOX','Ivan','0004','2008/06/19')
insert into Orders(Product,Personal_Name,Personal_ID,Purchase_Date)
values('PS3','Louis','0005','2008/06/19')
insert into Orders(Product,Personal_Name,Personal_ID,Purchase_Date)
values('Wii','Louis','0005','2008/06/19')
insert into Orders(Product,Personal_Name,Personal_ID,Purchase_Date)
values('PSP','Kenny','0006','2008/06/19')
insert into Orders(Product,Personal_Name,Personal_ID,Purchase_Date)
values('NDSL','Kenny','0006','2008/06/19')
insert into Orders(Product,Personal_Name,Personal_ID,Purchase_Date)
values('XBOX','Kenny','0006','2008/06/19')
insert into Orders(Product,Personal_Name,Personal_ID,Purchase_Date)
values('PS3','Kenny','0006','2008/06/19')
Stored Procedure
ALTER PROCEDURE [dbo].[prOrderStatistic]
AS
BEGIN
SET NOCOUNT ON;
declare @Total as int
select @Total = count(*) from Orders with (nolock)
select Personal_Name,Personal_ID,'Count' = count(*), 'Percent'=count(*)*100/@Total from Orders
group by Personal_Name,Personal_ID order by 'Count' desc
END
2008年5月30日 星期五
脆弱的生命與複雜的人心

一個小生命的誕生總是伴隨著喜悅,不過一個消逝的生命卻總是令人百感交集。每當面臨「生、老、病、死」各個階段時總是悅者歡、悲者哀,而我也只望人心不要凋零,冷漠會是最恐怖的結果。
這些年來歷經了國小同學的離去以及親人的消逝,最近又發生了過去工作同仁的不幸,生命就是這脆弱,小病痛引發的大症狀,或是如四川地震般的天然災害,生命就會消失,看著親人哭泣的臉,每每總是只能感嘆人世無常,不過在如此悲哀氣氛下發災難財的人也不少,畢竟不幸發生的當下,相關人等的憂患意識總是達到最高點,此時保險與個人安全的相關業務人員定會趁此機會行銷產品,產品的本身沒有錯,一個好的產品並不需要踩在別人的哀傷上也可以成功,是否有必要在最難過的時間點進行切入,其實就可看出該推銷者的眼界到底有多廣,小人走陰暗小路,成功的人總是走最明亮的道路在眾人的注目中昂首前進,雖然離開了公司,不過聽到前同事們的相關討論,稍微有感而發罷了。
救助不等於憐憫,不論是精神上的支持或是實質的幫助,能力範圍內的幫忙都可以是他人最大的後援。總覺得現在的人越來越冷漠越來越自私,希望我們下一代不要更加嚴重才好。
2008年5月17日 星期六
ASP.NET2.0 CSS 失效問題
我使用asp.net時,一直有感覺到CSS似乎不太受到控制,最常遇到的就是字型怎麼忽大忽小,弄到後來乾脆都不去設定字型,不過這樣就
太消極了,後來上網查詢了一下,發現原來很多人都有遭遇到這種問題,也有前輩提出了解決方法以及問題點。
PostBack後CSS失效的原因
PostBack後CSS失效的原因由於asp.net 2.0 默認採用「http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd」定義,裡面有要求在「<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-ransitional.dtd">」的前面不可以以任何的輸出,不過當我們在程式碼中使用Response.write()方法來做輸出時,就會發生違反定義的情況,此時就會有CSS失效的異常現象發生。
解決方法
1.將要輸出的資料存到Literal中再將其新增至頁面來做輸出
2.若是JavaScript Code 可以使用ClientScript輸出至標頭區
太消極了,後來上網查詢了一下,發現原來很多人都有遭遇到這種問題,也有前輩提出了解決方法以及問題點。
PostBack後CSS失效的原因
PostBack後CSS失效的原因由於asp.net 2.0 默認採用「http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd」定義,裡面有要求在「<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-ransitional.dtd">」的前面不可以以任何的輸出,不過當我們在程式碼中使用Response.write()方法來做輸出時,就會發生違反定義的情況,此時就會有CSS失效的異常現象發生。
解決方法
1.將要輸出的資料存到Literal中再將其新增至頁面來做輸出
Literal lt = new Literal();
lt.Text = "<scrupt>alert('Hellow World');</script>";
this.Page.Controls.Add(lt);
2.若是JavaScript Code 可以使用ClientScript輸出至標頭區
String sScript = "<scrupt>alert('Hellow World');</script>";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "test", sScript);
2008年5月11日 星期日
ASP.NET 程式碼中使用RGB設定色彩
我們在寫HTML時使用的顏色編碼為 RGB 編碼,下方會列出我在網路上找到別人做的色彩表(註一)
而在.Net中微軟將Color包裝成一個物件,原本就已經列出了很多預訂好的顏色供使用者選擇
不過對於習慣寫HTML的我來說,看到那些顏色名稱實在很難浮現色彩,所以對於顏色的設定
還是使用下列的方式,透過RGB的代碼來指定
註一. 色彩表
而在.Net中微軟將Color包裝成一個物件,原本就已經列出了很多預訂好的顏色供使用者選擇
不過對於習慣寫HTML的我來說,看到那些顏色名稱實在很難浮現色彩,所以對於顏色的設定
還是使用下列的方式,透過RGB的代碼來指定
方法一
System.Drawing.Color color = System.Drawing.ColorTranslator.FromHtml("#FFFFC0");
方法二
System.Drawing.Color color = System.Drawing.Color.FromArgb(255,182.193);
方法三
Gridview1.BorderColor = System.Drawing.Color.FromName("#FFFFC0");
註一. 色彩表
如何動態更換Web Services位址
之前在工作上有遇到需要透過.Net呼叫Web Services與其它系統進行溝通,不過由於系統上線後如果有問題需要動態的更換Web Services位置,如何透過程式的控制來進行變更就是我遭遇到的問題。
我們在.Net裡面可以直接Reference Web Services並將他設定為一個物件,之後在程式碼中就可以進行該物件的使用,不過該物件會固定指往我們一開始設定的網址去進行作業,如果想在程式碼中任意變更指定位置就必須使用Soap來自己實做囉? 其實不用,下面來分享一下我偷吃步的方法。
Web Services Address來源可以透過Database、Web.config、Text File....
如果大家有更好的方法記得一起分享喔
我們在.Net裡面可以直接Reference Web Services並將他設定為一個物件,之後在程式碼中就可以進行該物件的使用,不過該物件會固定指往我們一開始設定的網址去進行作業,如果想在程式碼中任意變更指定位置就必須使用Soap來自己實做囉? 其實不用,下面來分享一下我偷吃步的方法。
Step1. 加入Web Services參考
服務位置:http://xxx.xxx.xxx/service.asmx
參考名稱:TestService
Step2. 程式碼中使用並動態變更
/* Create Web Services Object */
TestService oWs = new TestService();
/* Switch Service Address */
oWs.Url = "http://ooo.xxx.xxx/services.asmx";
oWs.Discover();
Use Current Service Method...
Web Services Address來源可以透過Database、Web.config、Text File....
如果大家有更好的方法記得一起分享喔
2008年5月7日 星期三
深夜的最後一份報紙...

每天經過台北車站的人不知道有多少,每次我經過時總是覺得人潮似乎永無止盡,隨著時間持續流動的人群也沖淡了我對四周景物的注意力,總是快步前進,每天經過地下街與台北車站交接的地帶,依稀會看見一個坐在地上賣口香糖與報紙的阿婆,不過車站附近賣口香糖的人之多根本令我不會做任何的停留,對我來說只不過是一個老婆婆除了口香糖這項商品外還加賣了報紙罷了。
今天補習班下課後,外面下著大雨,走地下街到火車站的人比平常來的多,當我再次走到賣報紙的老婆婆的所在地時,突然想到平常這個時候這邊應該已經沒有人在販賣東西了,怎麼今天老婆婆還在這邊呢?當我還在思考的時候看到了一個高中生走過去拿起來最後的一份報紙,將手中的銅板交給老婆婆並叫老婆婆早點回家休息吧,雖然很小聲,不過在我耳中聽來卻異常的響亮,而老婆婆也跟他道謝然後開始收拾東西,不管那位高中生買了看報紙要做甚麼,我相信他一定是心疼一位老人家這麼晚還坐在冰冷的地上販售報紙,我開始覺得其實台灣的小孩依舊有著無限的希望,反倒是長大後的我是否已經遺失那份對人的關懷與信任?
ps.回家上網查詢後才發現原來老婆婆背景如此可憐
報紙婆婆 午後叫賣到午夜
2008年4月6日 星期日
3/29~3/31 花蓮原來離我這麼近
重新呼吸到花東的空氣,心中竟是如此複雜,空氣中似乎出現了記憶外的氣味,不知道未來的花蓮改變會有多大,我記憶中的花蓮又會存在多久?
高二那年我第一次前往花蓮旅行,只記得空氣清新,風景優美,與西部的鄉村感覺就是不同,覺得花蓮多了一股神祕的氣息,時間似乎停止了轉動,在我腦中一直都記得幾個小笨蛋走在立霧溪上,以為一直朔溪而上就會走到神秘谷,走了多久我忘了,沒人帶路根本到不了,幸好及時回頭,不然還真不知道會走到哪邊,最近又拿起泛黃的照片回味了一下,感覺真是有趣,雖然大家現在因為移民以及工作的關係比較少聚在一起,但是我與花蓮的記憶中永遠少不了這一段驚奇之旅。
時間持續流動,想不到不知不覺我在這邊待了四年,這段時間我看見了用力呼吸的花蓮市,努力呼吸西部空氣的花蓮市,中央山脈似乎逐漸無法阻隔兩邊的交流,在地方極力發展下,漸漸的越來越多觀光區的開發,連鎖企業也漸漸進入花蓮市,連志學村這種小村落也因為東華大學的學生數增加而開始進駐了便利商店以及越來越多的小吃店,農田逐漸消失,蓋起來一間又一間以農舍為名的學生宿舍,不知道是不是我的錯覺,耕作區似乎愈來越少了,整體的感覺似乎有點走樣,越來越商業化,或許未來的學生也無法像我一樣遇到親切的瓜農以及會請我吃早餐的老農民,他們生存空間逐漸萎縮,外來客經營的店家越來越多,鄉下的純樸氣息也越來越淡,我好怕哪天我回到這邊看到了一個我不認識的花蓮,呼吸到不屬於我記憶中的空氣。
生態環境的保護以及地區發展總是會有其衝突的一面,如何發展觀光並且要兼顧到原居住之居民的生活不會受到外來客的擠壓而有所萎縮,這應該是目前地方政府在進行規劃時除了眾所皆知的生態與地理環境的保護外應該要去注意的部分,我總覺得飛漲的物價似乎與花蓮目前的體質不是那麼的搭,遊客的消費能力並不代表當地原居住居民的消費能力,這種發展方式令我感到些許的擔憂與害怕。
2008年3月8日 星期六
第一次用烤箱來烤地瓜
2008年2月7日 星期四
2008又是嶄新的一年
好久沒在這邊跟大家見面了,自從去日本玩回來後我一直在考慮自己未來的走向,畢竟已經年紀不小了,要做決定之前都必須先好好思考一下,而不是想到就去做,不能再浪費時間了。
回顧2007年,我在這家公司的第二年,總覺得一直在做相同的事情,似乎一年過去了,我依然在原地踏步,或與安逸的生活讓我失去了衝勁,每天過著如下的生活
上班->無突破性技術的工作+互相推諉的競賽+充斥著貪婪奉承的環境->下班->loop
我發現我累了,而且是很徹底的累了,我不想繼續這樣下去,換個地方也好,我不要求展翅飛翔但是我希望我能稍微揮動自己的翅膀,我並不覺得自己是懷才不遇,應該是說我覺得我已經漸漸失去追求自己的勇氣,似乎變的為了工作而活,我開始問我自己是不是該重新開始了,回到一切的原點讓自己由零開始再出發。
回去唸書的念頭其實已經再我腦中出現快一年了,看著碩士越來越多,其實就算有人會說我們技術能力根工作態度都不比碩士差,其實待久了我還是很有發展阿,不過大公司跟小公司基本上就是有差,可能我進了一家很有制度的大公司,也讓我看到了什麼叫做立足點的不同,薪水、職等這些東西都是從學歷來的,我也不是這麼沒有野心的人,我也會想用力往上爬,只是我會希望自己是比較腳踏實地的,只是有些時候制度的高牆會讓我需要花上超過數倍的時間來打破,這樣我最快的解決方法是什麼?那就是跳脫到制度外面重新增加自己的價值,有幾條路讓我選擇:
1.創業當老闆
2.換一家肯拼就會有前途的公司
3.回去把碩士唸完
第一條路,我找不到我的資本在哪邊,能力也不夠,人脈也不夠廣。
第二條路,我工作經歷不夠久,沒有過人經歷,也沒有傲人的學歷或是特殊專長,我只是一個平凡小員工,那我要拿什麼去跟別的公司談條件,語言能力差,技術能力普通,很平凡的普通人。
第三條路,重新回到我迷失的校園中去尋找自己的價值所在,離開工作,回去重新培養自己。
我想了一段時間,我決定選擇第三條路,也可能是最浪費生命的一條路,或許補習一年的我沒辦法考上我想念的研究所,那我也只能乖乖的找家公司當個小職員待著,或許我花了三年把這件事情做完我依然一無所得,還是只能找家公司當個小職員,不過我想至少我未來不會有所遺憾,沒有藉口可以對自己說,你不行是因為學歷不如人,我會知道自己僅此而已,也可以說服我任勞任怨的持續做下去,這樣的決定或許對於我身邊關心我的人以及我的工作夥伴們有點不好意思,畢竟在工作上我遇到了很多好朋友,我拋了我手上的工作當然就是加諸到他們身上,希望大家不要太怪我,我也只是個平凡人,現在的我也是不想讓自己在未來後悔的孩子罷了。
朋友是一輩子的資產,每個階段我不奢望能帶走什麼東西,我只希望朋友能讓我帶著一輩子。
訂閱:
文章 (Atom)