2010-10-29 46 views
1

我有一个gridview充满了电话号码。为了填充gridview,我将gridview的数据源绑定到电话号码列表中。我在页面首次加载时执行此操作,但不是在回发时执行此操作。ASP.NET,回发后绑定到什么数据网格?

我希望用户能够删除一些电话号码,然后,如果他们想要,点击保存按钮,这将更新数据库,否则他们的更改将被忽略。所以我在网格中有一个按钮,并且会触发一个事件,我可以调用DeleteRow(行索引)并从该事件中删除该行。出于某种原因,这是行不通的。

我在Internet上找到的所有gridview示例都通过调用sql函数立即执行删除操作,然后重新绑定。并且一些示例在每次加载页面时绑定网格,这似乎效率低下。

我的问题是: 删除按钮导致回发到服务器。回发时,电话号码列表不再存在。而gridview的数据源为空。网格不再受限制。但是必须有数据存在,因为网格中的数据仍然是可见的。这个数据在哪里,我可以删除它的一行,以便GridView中的一行被删除?

回答

2

的视图状态保存DataGrid的内容,所以答案为“The Viewstate

了解视图状态是至关重要的了解ASP.NET是如何工作的,因此而不是仅仅发布足够的信息来回答你的问题,我我会推荐你​​阅读我链接到的整篇文章。

+0

谢谢!这个链接是一个很好的阅读。我检查过回发时没有绑定,并且在调用deleterow之后调用saveviewstate。我注意到当我调用DeleteRow时,网格中的行数是前后相同的。我应该在其中一个删除事件中做些什么? – 2010-10-30 09:45:18

0

您可以使用jquery,您需要将每个已删除行的Datakey值保存在隐藏字段 中并隐藏所选行,并且当用户单击保存时,您可以根据隐藏字段值。

+1

我强烈建议在这种情况下避免使用JQuery。并不是说jQuery无法做到这一点,但自.NET 1.1天以来,datagrid一直存在,并且所有回发数据都存储在ViewState中(除非ViewState已被关闭以进行控制)。这就是说。jQuery不能访问ViewState数据。 – ewitkows 2010-10-29 19:48:07

+0

对于本示例和所有具有相同场景的示例,最好使用客户端资源,导致用户不确定是否完全移除行。用户点击保存按钮后,现在可以在后面的代码中执行删除过程,因此我建议使用隐藏字段来实现该场景。 – arlen 2010-10-29 22:12:28