2013-02-18 54 views
1

我有一個由可編輯文本框組成的GridView。當用戶輸入一個值時,OnTextChanged函數調用我的UpdateColumns()方法,該方法執行各種計算並更改整個GridView。我將用戶輸入限制爲僅限數字,以便在用戶在任何單元格中輸入字母字符時操作出錯。出現此錯誤後,我想恢復到用戶輸入字母字符前立即存在的數據表。將當前GridView數據表分配給會話?

有沒有辦法捕捉當前GridView的數據源並存儲在DataTable中?

我曾嘗試以下(數據表已結合後):

Dim dt As DataTable = DirectCast(gvBuildingBlocks.DataSource, DataTable) 
Session("buildingBlocks") = dt 

'If textboxes are all numeric, perform calculations here 

'Else display error here and bind table below 
gvBuildingBlocks.DataSource = CType(Session("buildingBlocks"), DataTable) 
gvBuildingBlocks.DataBind() 

在一個空的GridView上述結果,作爲gvBuildingBlocks.DataSource值爲空。還有什麼我可以做得到的價值?

我想我可以遍歷所有行並以某種方式保存如下:

For Each row As GridViewRow in gvBuildingBlocks.Rows 
    'Save cell value here 
Next 

但我不知道用什麼樣的代碼保存價值?

任何幫助,非常感謝。

謝謝!

+0

爲什麼不在第一次綁定gridview時設置會話變量? – gaurav 2013-02-18 19:35:48

+0

我其實已經這麼做了。但是如果用戶做出了幾個正確的修改,然後在文本框中意外地輸入了'a'呢?它將恢復到原始數據綁定網格視圖,這將導致數據丟失。 – TimeBomb006 2013-02-18 19:37:30

回答

2

我知道您正在對行進行計算,並且您想要在用戶輸入無效時回滾到原始值。你可以通過在編輯前調用DataRow.BeginEdit()和在輸入無效的情況下調用DataRow.CancelEdit()來實現這一點。請參閱this example

如果編輯有效提交更改,請不要忘記調用DataRow.EndEdit()