【问题标题】:asp.net datagrid postback all rowsasp.net datagrid 回发所有行
【发布时间】:2010-02-03 15:36:45
【问题描述】:

我在这里遇到了一个小问题....我需要一个数据网格控件,它在客户端维护(用户将在覆盖控件中编辑客户端的网格,而不与服务器交互,我将使用javascript 在此处添加/编辑行)....所以当用户点击表单上的保存按钮(这将是一个 ajax 调用)时,我希望这个网格中的整个数据(网格将少于 50 行)得到提交到服务器。我正在使用组件艺术工具中的网格,它只发回添加或编辑的行。我不想要这个。所以,我正在考虑使用 asp.net gridview。我不确定 asp.net gridview 是否这样做。有没有人知道这一点或更好的方法来实现我想要做的事情???

【问题讨论】:

  • 为什么要将未编辑的行发回服务器?
  • 如果输入字段有一些无效数据,那么我无法将此记录保存到数据库中,因此我会将其发送回客户端报告错误,并且我希望 datagird 中的所有数据都显示在那里.现在当用户更正错误并再次重新提交页面时,将不会为这次未更新的任何行调用更新网格函数,因此这些数据将丢失。
  • 你能发布一些示例代码吗?
  • 我不确定我是否可以发布一段代码来描述我的问题的任何部分。代码太大了。我也在使用组件艺术(第 3 方工具)。

标签: asp.net gridview postback


【解决方案1】:

GridView 可以工作,因为它使用ViewState 来维护其信息。在回发期间,您可以访问所有记录,包括更改和未更改的值。

在编辑网格时有多种方法可以解决 AJAX 要求。最简单的解决方案是将网格包装在UpdatePanel 中,并挂钩到选择的GridView event,例如GridView.RowUpdatedGridView.RowDeleted 等。服务器通过异步回发处理的所有操作都将是与用户无缝连接,没有难看的闪烁等。

示例标记:

<asp:UpdatePanel UpdateMode="Conditional">
    <ContentTemplate>
        <asp:GridView ID="MyGridView" runat="server" OnRowUpdated="MyGridView_RowUpdated" .. />
    </ContentTemplate>
</asp:UpdatePanel>

后面的代码:

protected void MyGridView_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
    //do what you need with the affected row, etc.
}

通过以上内容,您仍然需要根据您的要求确定如何存储数据和绑定等...

【讨论】:

  • 感谢您的回复。我想我还有一个未解决的问题。最初用户所在页面的数据库中没有记录。用户填写一些字段并点击提交,如果输入字段有一些无效数据,那么我无法将此记录保存到数据库中,因此我会将其发送回客户端报告错误。现在,当用户更正错误并再次重新提交页面时(他这次可能不会编辑数据网格),那么更新/插入网格函数将不会为这次没有更新的任何行调用,因此这些数据将丢失。
  • 如果你使用GridView,那么每条记录都可以保存在数据库中,并在回发时反弹。如果添加有错误的另一条记录,则第一条记录不会丢失。这是一种常见的 .net 设计模式。我不确定为什么它对你不起作用......
  • 一条记录由许多输入字段和 2 或 3 个数据网格组成,随着时间的推移,我们将向该记录添加更多内容。如果记录有错误,我无法在数据库中保存记录(除非您更正记录,否则不会将任何内容保存到数据库中),因为当我添加新记录时大约有 15 个表会受到影响。如果数据库不允许来自某些输入字段的值,它将完全拒绝该记录。
  • 是的,听起来你已经忙于处理这个了。祝你好运! :)
  • 感谢您的帮助。我实际上决定使用回发而不是 AJAX,这解决了所有问题。
猜你喜欢
  • 2017-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
  • 2017-02-23
  • 2016-11-06
相关资源
最近更新 更多