ASP.NET:就是喜歡Web Form,就是喜歡拖控制項(一)
ASP.NET:就是喜歡Web Form,就是喜歡拖控制項(二)
ASP.NET:就是喜歡Web Form,就是喜歡拖控制項(三)
ASP.NET:就是喜歡Web Form,就是喜歡拖控制項(四)
ASP.NET:就是喜歡Web Form,就是喜歡拖控制項(五)
前一篇ASP.NET:就是喜歡Web Form,就是喜歡拖控制項(二)裡有評論提到,老趙怎麼跟包子餃子跑一塊去了?咱們仔細看,這樣列出的表確實有些問題,company_id被設計成一個外鍵,若是直接列出此表給使用者看,company_id是不可理解的。
id |
name |
company_id |
image |
1 |
包子 |
3 |
[bin] |
2 |
蒸餃 |
3 |
[bin] |
3 |
人才 |
1 |
[bin] |
4 |
MVP |
1 |
[bin] |
5 |
Window 7 |
2 |
[bin] |
我們不妨再往前點,回憶下此系列的第一篇 ASP.NET:就是喜歡Web Form,就是喜歡拖控制項(一)
似乎還有這麼一張表:
Company
id |
name |
1 |
部落格園 |
2 |
微軟 |
3 |
樓下包子鋪 |
不錯,老趙和包子蒸餃可不是一個地兒出來的。我們的使用者大概更希望看到下面的表:
id |
name |
company_name |
image |
1 |
包子 |
樓下包子鋪 |
[bin] |
2 |
蒸餃 |
樓下包子鋪 |
[bin] |
3 |
人才 |
部落格園 |
[bin] |
4 |
MVP |
部落格園 |
[bin] |
5 |
Window 7 |
微軟 |
[bin] |
這樣的資料表就清晰多了。
說起實現,你的第一個想法可能是C#去查詢,不過資料庫為我們提供了更佳的方法:視圖。
我們要在資料庫裡建立一張視圖,這樣我們可以獲得正確的語義和潛在的底層最佳化。
建立視圖方法如所示:
使用GridView來顯示時,我們不需要任何特殊處理,只要把視圖當作普通的表來查詢就可以了。
好了,用GridView顯示這回已經很好了,接下來我們看看這個表單還有什麼問題:
我們的提交表單看起來很土,居然要使用者手動去輸入公司id!
如前面所說,id這種東西,使用者看都看不明白,更何況輸入!所以應該提供一種更為友好的輸入方式。於是我們想,既然公司數目有限,做一個下拉式清單是個不錯的主意。我們只需要去插入模板裡面把TextBox換成DropDownList,把它的資料來源改成Company表的資料來源(注意,每個DropDownList有自己的資料來源),再用方式配置資料繫結:
好了,就這麼easy,我們的公司id欄位已經可以從dropdownlist裡面選了。
別忙,我們還有一個資料項目:id,其實我們希望這個id是自動產生的,而不是使用者提交的。這個的解決方案跟ASP.NET倒是沒什麼關係,只要在資料庫裡把id設定成自增的欄位就可以了,見圖:
然後我們要更新下資料來源和FormView模板,很簡單就不多說了.效果
現在我們有了一個功能完備的表單,讓我們來進一步提個需求,給資料表加個欄位:加入時間
id |
name |
company_id |
image |
adddate |
1 |
包子 |
3 |
[bin] |
2009-12-14 |
2 |
蒸餃 |
3 |
[bin] |
2009-12-14 |
3 |
人才 |
1 |
[bin] |
2009-12-14 |
4 |
MVP |
1 |
[bin] |
2009-12-14 |
5 |
Window 7 |
2 |
[bin] |
2009-12-14 |
這個加入時間,同樣是不希望使用者自己去輸入的,希望每次插入資料的時候都使用當時的時間,而且我們必須避免使用者惡意更改。
其實這個問題,我們只需要再插入Sql語句上動點手腳就行了,重新設定FormView的資料來源,把Insert語句改掉:
INSERT INTO [commodity] ([name], [company_id], [image],[addtime]) VALUES (@name, @company_id, @image,CURRENT_TIMESTAMP)
再插入一條新的資料試試,可以按照預期運行了。T-SQL其實是很強大的語言,它甚至是圖靈完備的,我們在儲存時的很多邏輯操作和變換都可以通過T-SQL來完成,靈活使用T-SQL可以省去不少本來在C#中的工作量。
下一篇預告:
將會重點講講跟用戶端的整合,其實只要使用的時候遵守一定原則,ASP.NET一樣可以產生高品質HTML代碼。