将当前GridView数据表分配给会话?

时间:2013-02-18 19:25:59

标签: asp.net vb.net

我有一个由可编辑文本框组成的GridView。当用户输入值时,OnTextChanged函数调用我的UpdateColumns()方法,该方法执行各种计算并更改整个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

但我不知道用什么代码来保存值?

非常感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:2)

我知道您正在对行进行计算,并且如果用户输入无效,您希望回滚到原始值。您可以在行级别通过在编辑前调用DataRow.BeginEdit()来完成此操作,如果输入无效,则可以DataRow.CancelEdit()。见this example

如果编辑有效提交更改,请不要忘记调用DataRow.EndEdit()