实作 ASP.NET 多笔数据离线编辑
無廢話,本帖提供一個 ASP.NET 的示例下載,包括五大功能「多筆編輯 + 離線編輯 + 多人并行寫入沖突偵測 (Concurrent) + 批次寫入數據庫 + 保留用戶在 GridView 的輸入值」。
日前版工我要把十幾年前的舊系統,翻新成 Web 界面,代碼也要重寫。為了搭配客戶的操作習慣,要能提供「離線」編輯的功能,亦即使用者在 ASP.NET 所做的多個「 創建、修改、刪除」內容,要能暫存在內存里,等到最后單擊一個「存檔」Button,才一次回寫至數據庫。
-------------------------------------------------
本帖的示例下載點:
http://files.cnblogs.com/WizardWu/090225.zip
(執行本示例,需要 VS 2008 或 IIS,以及 SQL Server 數據庫)
-------------------------------------------------
示例執行畫面如下:
* 功能 1 : 多筆編輯
* 功能 2 : 離線編輯 (這個最難)
* 功能 3 : 多人并行寫入沖突偵測 (Concurrent, 同時開啟兩個瀏覽器執行此示例,即可測試此一功能)
* 功能 4 : 批次 (Batch) 寫入數據庫 + Transaction
* 功能 5 : 保留用戶在 GridView 的輸入值
功能說明:
* 功能 1 : 多筆編輯 :
就是 GridView 每一行每一列都可輸入,這也沒什么,就討人厭的客戶和 SA 要求的功能。另 GridView 的每一行、每一列的控件,如:TextBox,仍可搭配 Validator,或 AJAX 的 FilteredTextBoxExtender 等控件,做用戶的輸入驗證。
* 功能 2 : 離線編輯 :
如上圖,用戶單擊橘色行右方的「新增」按鈕,不會真的寫入數據庫,而是將用戶在 FooterRow 輸入的創建數據,暫存于內存的 DataTable 里,用戶并能再持續創建多筆記錄。要等到單擊左下方的「存檔」按鈕,才會將用戶先前做的所有「創建、修改、刪除」數據,一次全部寫入數據庫,以仿真一些遠古舊系統的操作模式。
* 功能 3 : 多人并行寫入沖突偵測 (Concurrent) :
舍棄 ObjectDataSource 控件的 Concurrent 功能,改用數據表里的一個 MODIFY_DT 字段,來判斷是否在同一時間,有兩人或多人同時欲編輯數據庫里的同一筆記錄。若是的話,只有先存儲者能正確寫入數據庫,并在存儲成功后,將目前時間一并寫入數據庫的 MODIFY_DT 字段;后存儲者將被迫放棄,必須先離開此頁后再回來、取得數據庫里最新的 MODIFY_DT 字段的最新時間后,才能存儲。
* 功能 4 : 批次寫入數據庫 + Transaction :
就是一次「創建、修改、刪除」多筆記錄至數據庫,并加上數據庫「事務 (Transaction)」,這也沒什么,只要將多個 SQL 語句用「分號 (;)」串連起來即可。唯
一要注意的是,多個語句中的 Parameter Name 不可重復。
* 功能 5 : 保留用戶在 GridView 的輸入值 :
由于「創建」功能內嵌在 GridView 的 FooterRow 里,當用戶按下「新增」按鈕后,必須執行 GridView.DataBind(),以將創建一筆后的結果,實時顯示在 GridView 里。但此舉將導致用戶在 GridView 其它既有數據行的輸入值遺失,導致操作上的不便。因此我在用戶按下「新增」按鈕后,將其它數據行每個控件的輸入值,先暫存至一個 DataTable 里;等到 GridView.DataBind() 之后,再從這個 DataTable 里,將所有的值填回 GridView 的每一行每一列。
最近開發的都是一些小系統,沒機會用多高深的 Framework,或最新最炫的新技術,但必須靠一些硬底子功夫硬干,以應付一些客戶和 SA 不合理的需求。
------------------------
附注:
代碼的注釋都是以繁體中文撰寫的 (繁簡的「行、列」剛好相反),以下為用字對照表:
簡 繁
數據 - 資料
數據庫 - 資料庫
表 - 資料表
行 - 列
列 - 行
記錄 - 記錄
字段 - 欄位
事務 - 交易
內存 - 記憶體
控件 - 控制項
------------------------
?
總結
以上是生活随笔為你收集整理的实作 ASP.NET 多笔数据离线编辑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 应用squid全面加速web(全)
- 下一篇: 第一次给知名项目贡献代码,有点紧张