Posts

Showing posts from August, 2013

[ASP.NET] GridView CRUD - 如何利用DetailsView新增Gridview資料?

Image
前言:
承接小弟所分享的Gridview顯示, GridView更新資料的兩篇文章, 最後剩下新增了 (謎之聲: 不是先分享新增然後修改刪除才對嗎).

假如要新增一筆公司資料應該要怎樣呢?

新增Gridview資料的部分比較簡單. 所以下部分是多字小圖喔(無誤)

方法:

先拉一個DetailsView出來, 按一下DetailsView-> SmartTag->Configure Data Source, 把Business Object指向XSD檔案內公司主資料表COMPANY, 按Next, 然後確定insert頁面已經連結相關statement, 按finish.
然後把不需要填寫的欄位刪除掉, 順便把foreign ID的欄位轉成TemplateField.

最後把foreign ID的欄位跟DropDownList綁定, 詳細做法如這篇有說明

[ASP.NET] GridView CRUD - 如何修改被轉為顯示值的ID

Image
前言:
上一篇提到怎樣把原本在資料庫的foreign ID在presentation layer中轉為給人看的值. 這一次談一下小弟的經驗, 利用GridView去修改已經轉為顯示值的foreign ID.

例如現在需要像下圖一樣把ID為2的那筆資料的CategoryName從糖水鋪轉為其他

我需要提供可供選擇的DropDownList
方法:
先把CategoryName轉成TemplateField. 在Gridview上按一下SmartTag, 選取Edit Columns. 在Selected fields中選取CategoryName, 然後在右邊選"Convert this field into a TemplateField". 然後按OK.再次在Gridview中按一下SmartTag, 選擇"Edit Template", 然後在Smart Tag中選擇CategoryName的EditItemTemplate. 把原來的TextBox刪除, 然後拉一個DropdownList, 一個ObjectDatasource進去.
先設定ObjectDatasourceCompanyType. 按一下smart tag, 然後選"Configure Data Source", 然後選取放置文字的資料表, 像我這裡在COMPANY_TYPE, 選好以後按finish.把DropDownList連結到ObjectDataSourceCompanyType. 按一下DropDownList-> smartTag -> Choose Data Souce. 把要顯示值還有data field設好. 按OK.
把DropDownList綁定GridView上的Category ID, 即是告訴系統說我這個DropDownList的值其實就是Category ID. 在DropDowdList中-> SmartTag->Edit Databindings
在"Bindable properties"中選取"SelectedValue", 在右邊Bound to選取儲存Category ID的欄位"CATEGORY", 勾選"…

[ASP.NET] GridView CRUD - 如何把ID轉為顯示的值

Image
前言:
我想很多大大寫ASP.NET的時候也會遇到同樣的問題: 很多時候為了很多原因, 例如Data size, 速度, 不過度扁平化資料表等等, 在資料庫的設計上我們會進行normalization. 例如公司名稱用CompanyID取代, 然後把真實給人看的名字分割到另外一個Table.

因此當我們要把資料顯示在Presentation layer(就是使用者介面)的時候, 一定逃不過要把資料表JOIN起來.

傳統的做法是把JOIN好的SQL直接寫在SqlDataSource裡面. 這樣很方便是沒錯, 不過除了在維護上會很困難, 也違反了把Data access layer跟Presentation layer 盡量loosely coupled的原則.

不過好死不死, ASP.NET 的Gridview功能實在有點雞肋, 它不能像dropdownlist一樣可以選擇Display value. 我自己之前用的笨方法是先把只有值的table跟Gridview進行連結, 再寫一個class放在Data bounded的事件中把值換成顯示的值. 老實說真笨....

前幾天又遇到了老問題, 我堅決不相信就是沒有解決方法, 查了MSDN老半天 終於守得雲開見月明, 柳暗花明又一.....(喂).

方法:

準備工作:

先用XSD檔案(Dataset)描述資料表, 例如公司資料表中的CATEGORY欄位對應顯示用資料表COMPANY_TYPE的COMPANY_TYPE_ID. 
另外資料表中的TableAdapter使用最簡單的SQL STATEMENT, 例如資料表COMPANY使用的就是select * from COMPANY, 完成後應該會自動產生UPDATE, INSERT跟DELETE的指令.接下來修改COMPANY資料表. 在COMPANY資料表上的TableAdapter按一下右鍵->Configure
把原來超簡單的sql換成下面這一句


好像很難, 說穿了其實只是在原本COMPANY資料表後面加上要願示的欄位而已. 改好了以後按NEXT NEXT NEXT到OK就可以了.實作:
設定ObjectDataSource 首先反回aspx頁面, 抽一個ObjectDataSource叫ObjectDataSourceCompany, 在ObjectDataSource上…

[Windows7] 跨距磁碟區, 等量磁碟區, 鏡像磁碟區之區別

Image
話說前兩天用來備份的USB硬碟無緣無故去領便當了.

大幸的是我一直有好好備份, 資料至少存在兩顆硬碟上, 所以備份硬碟掛了損失也不大(錢包除外).

所以昨天下班以後趕緊去買一顆seagate的2TB內置硬碟回家(感覺USB硬碟還是不太安全), 裝好以後突然想到一個問題:

現在我桌機總共有5顆硬碟, 首先是剛買回來的2TB, 1顆80G SSD, 1顆640G, 1顆320G, 1顆160G. (真多舊硬碟囧), 關於硬碟的部分Windows 7比XP多了一些選項, 應該選那個才對?

讓我自己先分析一下:

那麼零碎的硬碟應該選擇合拼方案為主關於合拼的方案Windows7有三大選項, 分別是跨距磁碟區; 等量磁碟區; 鏡像磁碟區三種, 應該怎樣選呢?
說穿了那三種其實就是軟體的RAID方案, 硬要改一些好像很簡單又不簡單的中文字.
其實: 跨距磁碟區 = JOBD,  就是簡單把幾顆硬碟變成一顆大的邏輯硬碟, 資料的存放機制是由第一顆硬碟開始依序往後存放,即作業系統看到的是一個大硬碟(由許多小硬碟組成的)。但如果硬碟損毀,則該顆硬碟上的所有資料將無法救回。若第一顆硬碟損壞,通常無法作救援(因為大部分檔案系統將磁碟分割表(partition table)‎存在磁碟前端,即第一顆)[1]
等量磁碟區 = RAID 0 把資料分散在幾顆硬碟, 存取的速度比較快, 不過壞一顆又是全部壞掉.
鏡像磁碟區 = RAID 1 顧明思義有兩份data, 超安全, 不過由於write的時候也要write兩份, 所以速度會慢.
更詳細的解釋這裡[2]魚仔大有好好的解釋說明三種功能, 小弟就再不說了.
總結: 那我要怎麼辦? 最後我選擇的是....什麼都不做, 80G的SSD留給OS及程式專用, 640G的用來放照片/動畫/影片/影像檔, 320G的用來放文件還有裝一些不重要的應用程式(遊戲啦,遊戲啦,還有一些遊戲之類的), 160G的用來裝音樂還有.......你懂的. 至於2TB的那顆就是當成上面所有硬碟的mirror, 用sync工具即時備份.
為 什 麼 ?
因為JORB不是不好, 不過把那幾顆舊硬碟變一顆有很大的風險, 因為那幾顆碟使用的時間不同品牌也不同, 萬一其中一顆掛掉就哭死了.
RAID0是快沒錯, 不過除了上面的原因, 也因為全部硬碟當同一顆運行, 全部硬碟也不能變回待機的狀態(不像現在沒用那顆就變…