在没有DataBind的情况下向GridView添加新行

时间:2008-11-07 19:20:38

标签: asp.net gridview data-binding

我有一个GridView,它允许始终在每一行中的每一列中编辑值。用户输入所有更改,单击“保存”一次,然后提交所有更改。

用户还必须能够单击“新建”按钮,在GridView中显示一个新行(是的,它必须显示在实际的GridView中),输入他们想要的任何数据,单击“保存”并进行所有更改到数据库。

现在。以下是抛弃我的用户案例:用户到达页面,对几个现有行进行多处更改,然后需要添加新行,在新行中输入数据,单击“保存”,并将所有更改都转到数据库

但是,我看到添加一个新的空行的唯一方法是重新绑定GridView,这意味着它们的所有更改都将丢失。这显然不好。

所以,我的问题是:在不必重新绑定GridView的情况下,向GridView添加一个新的空的可编辑行有哪些方法?

我唯一能想到的是,在New按钮的click事件中,从GridView中取出所有数据(包括用户的潜在编辑),将其保存到ViewState(或其他),添加新行,重新填充网格。对我来说,这看起来有点hacky,但它应该允许我在GridView上关闭ViewState。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

我可以想到两个选择。第一种是缓存绑定到网格中的原始结果,当需要添加另一行时,将数据行添加到要绑定的数据列中,然后将其绑定到网格。如果网格中有更改,则需要更新数据表。完成所有更改并且用户单击“保存”按钮后,您可以遍历表并使用数据更新数据库。

可能看起来像这样

页面加载

  • 获取数据库数据并放入表格
  • 将表格绑定到网格
  • 将表存储在缓存中

当用户要求新行

  • 获取缓存的数据对象。
  • 更新已更改的所有行
  • 添加空行绑定到网格

当用户保存网格时

  • 获取缓存对象。
  • 制作最后一组更新
  • 遍历行并更新数据库

另一种方法是动态创建网格,但考虑到你所描述的内容,这将涉及更多的努力。

答案 1 :(得分:0)

您可以通过javascript动态添加新行,并在save命令中查找新添加的行。这很常见。