【问题标题】:ASP.NET GridView binding sequenceASP.NET GridView 绑定序列
【发布时间】:2011-10-19 09:31:55
【问题描述】:

我试图在运行时绑定我的 GridView,但我也试图避免两次运行所有绑定事件。

我有一个从返回 DataTable 的函数中填充的 GridView。出于几个原因,我没有在网格中使用 ViewState。我似乎在这里遇到了 Catch-22 的情况:

  • 如果我最迟不通过 Page_Load 绑定网格,则不会触发 RowCommand 和其他网格事件。
  • 如果我在 Page_Load 中绑定了网格,但我在来自寻呼机链接、排序链接或搜索按钮的 PostBack 上,这些事件处理程序将更改数据并需要重新绑定它,再次运行所有绑定代码.

网格触发 DataBound、RowDataBound 和 RowCreated 事件,可能执行昂贵的操作。我真的很讨厌在 Page_Load 中调用它们,然后清除数据并在数据发生变化时再次调用它们。但我似乎无法避免这种双重职责,因为在 Page_Load 中我不知道是会更改数据的网格事件,还是不会更改数据的网格事件。

有什么想法吗?

【问题讨论】:

    标签: c# .net asp.net data-binding


    【解决方案1】:

    检查请求是否是回发。像这样将数据表绑定到网格:

    如果(!ispostback)... 这样您就不会在每次请求时将表格绑定到网格。

    【讨论】:

    • 问题是 IsPostBack 不够具体。我需要知道它是否是来自网格中按钮的回发(因此会生成 RowCommand 事件)。
    • 场景 1) 为什么要处理 page_load 中的绑定?您正在更改要操作的内容。你到底想完成什么,这样我就可以解决你的问题。您可以在网格中commqnd按钮的onclick事件中将网格绑定到表格...
    • 我认为你真的应该尝试 if(!ispostback) 然后进行初始绑定,否则什么都不做,appflow 会将你带到导致回发的事件。阅读一篇关于 asp.net 页面生命周期的文章
    • 对不起,我知道这可能更清楚。在方案 1 中,我不更改可见数据。这就像网格中的详细信息按钮,它需要生成一个 RowCommand 事件,但它会做一些不同的事情。
    • 你在使用调试器吗?只需在 page_load 和您感兴趣的每个其他处理程序中设置一个断点,运行应用程序 (f5) 并按 f10 单步执行您的代码。这样你就可以监控你的代码执行了哪些部分。干杯队友
    【解决方案2】:

    尝试命令参数。如果单击了 gridview 中的按钮,则该事件将被触发,您可以适当地处理它。恐怕你的问题不够清楚。你能说得更具体一点吗?

    【讨论】:

    • 我在 EDIT 中添加了这两个场景。不过我喜欢命令参数的想法,我会研究一下。
    • 命令参数为我做了。我必须制作操作列 ITemplate 列,并向它们添加 HtmlAnchor 控件。这让我可以覆盖 href 属性并将其设置为 javascript:__doPostBack('commandName', 'commandArg'),然后我可以在 Page_Load 中对其进行解码。似乎是环形交叉路口,但它确实有效。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多