您的问题缺乏细节,答案完全取决于每行可能显示的“详细信息”的构成。
但是,我会执行以下操作,使用带有 asp.net ajax 处理程序的 jquery 来获取数据(按需)并将其注入新的 gridview 行。
在单击事件导致您的行进入“选定”模式时,我会触发一个 jquery 函数。
此 jquery 函数将触发对 GrabRowDetails.aspx 的 ajax 命中。
GrabRowDetails.aspx 将在查询字符串中输入。
根据这个输入,它会查询数据库。
最终,GrowRowDetails.aspx 必须将相关数据打包成 JSON,然后再渲染回客户端。
Response.ContentType = "application/json"
Response.Write(SB.ToString()) 'emits the JSON
最后,您的 ajax-success 处理程序将负责创建一个新的表行并将相关数据塞入该新行。
它如何知道将新行放在哪里?顶部提到的单击处理程序应传递对触发单击事件的控件的引用。
使用此引用,您可以使用nearest 函数。 this.nearest("tr").after(..new_row_with_max_colspan_cell..)。
after 函数将在选定元素之后插入一个元素。因此,您只需要插入一个具有最大 colspan 的单个 TD 的新 TR。然后,您可以在该区域内工作。
当涉及到做这样的事情时,我使用原始 jquery 而不是 ASP.NET 控件会更好。
注意事项
- .ashx 在处理 ajax 请求方面比 .aspx 性能更高,但我遇到了一些 http 处理程序的调试问题。因此,我使用了成熟的 .aspx。如果速度是一个问题,我肯定会使用 ashx。
- 您的 jquery 函数还应该删除任何以前打开的详细信息行。这可以通过在详细信息行上设置特定的 css 类来完成,例如
details,然后使用remove 函数删除任何持久的详细信息行。