【问题标题】:ASP.NET, what is a datagrid bound to after postback?ASP.NET,回发后绑定到的数据网格是什么?
【发布时间】:2011-05-02 13:58:54
【问题描述】:

我有一个充满电话号码的网格视图。为了填充网格视图,我将网格视图的数据源绑定到电话号码列表。我在第一次加载页面时执行此操作,但不是在回发时执行此操作。

我希望用户能够删除一些电话号码,然后,如果他们愿意,请单击保存按钮,这将更新数据库,否则他们的更改将被忽略。所以我在网格中有一个按钮,并且触发了一个事件,我可以调用 DeleteRow(row index) 并从该事件中删除该行。由于某种原因,这不起作用。

我在网上找到的所有gridview示例都是通过调用sql函数直接执行删除,然后再次绑定。还有一些例子在每次页面ios加载的时候绑定grid,看起来效率很低。

我的问题是: 删除按钮会导致回发到服务器。在回发时,电话号码列表不再存在。而gridview的数据源为空。网格不再受约束。但是某处肯定有数据,因为网格中的数据还是可见的。这个数据在哪里,我可以删除其中的一行,从而删除gridview中的一行吗?

【问题讨论】:

    标签: asp.net datagrid binding


    【解决方案1】:

    viewstate保存datagrid的内容,所以答案是“The Viewstate

    了解视图状态对于了解 ASP.NET 的工作原理至关重要,因此我建议您阅读我链接到的整篇文章,而不是发布足够的信息来回答您的问题。

    【讨论】:

    • 谢谢!该链接是一个很好的阅读。我已经检查过回发没有绑定,并且在调用 deleterow 之后调用了 saveviewstate。我注意到,当我调用 DeleteRow 时,网格中的行数在前后是相同的。我应该在其中一个删除事件中做些什么吗?
    【解决方案2】:

    你可以使用jquery,你需要将每一个被删除行的Datakey值保存在一个隐藏字段中 并隐藏选定的行,当用户点击保存时,您可以根据隐藏字段值@后面的代码删除行。

    【讨论】:

    • 我强烈建议在这种情况下避免使用 JQuery。并不是说 jQuery 做不到,但是自 .net 1.1 天以来,datagrid 就已经存在,并且所有回发数据都存储在 ViewState 中(当然,除非 ViewState 被关闭以进行控制)。话虽如此.. jQuery 无法访问 ViewState 数据。
    • 对于这个例子和所有具有相同场景的例子,最好使用客户端资源,导致用户不确定是否完全删除行。用户点击保存按钮后,现在可以在后面的代码中进行删除过程,所以我建议使用JQuery,隐藏字段来实现场景。
    猜你喜欢
    • 2010-10-24
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 2017-04-23
    相关资源
    最近更新 更多