是否可以在弹出窗口中使用报表查看器 window?
Is it possible to have report viewer in a popup window?
我有一个 ASP.NET 4.0 网络应用程序。
应用程序有两个新页面:
- openInvoice.aspx 包含一个网格视图。其中一列是 ID,它是一个 link 按钮并调用 "select" 命令。 "select" 将 datakeyname ID 传递给 reportviewer。
- reportviewer.aspx 包含报表查看器、ObjectDatasource 和报表路径 (invoice.rdlc)。
截至目前,我可以在 gridview 中单击 ID 并完成重定向以转到报告。但我想做的是在 openInvoice.aspx 内的弹出窗口 window 中打开 reportviewer.aspx,这样就不必进行重定向并强制用户按下浏览器中的后退按钮.
这可以吗?如果是这样,如何?
应该很简单,因为您有一个包含报告查看器的专用页面
我使用 jQuery 和 ColorBox。您只需要设置适当的选项。像这样:
function ViewPopUpReport(id) {
var options = {
iframe: true,
href : null
// there are many more parameters available, this is just the short list to keep it simple
}
options.href = 'reportviewer.aspx?id=' + id;
$.colorbox(options);
}
这是关键。 Select处理报告会导致回发。那必须停止。最简单的方法是禁用 Gridview 上的行选择并替换你自己的 onclick(注意:我在 VB 工作,但你应该能够很容易地转换它):
Private Sub YourGridView_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles YourGridView.RowDataBound
Dim gv As GridView = sender
If e.Row.RowType = DataControlRowType.DataRow Then
Dim pkey As String = gv.DataKeys(e.Row.RowIndex).Values("your_report_id")
If pkey IsNot Nothing Then
e.Row.Attributes.Add("onclick", String.Format("ViewPopupReport('{0}');", Server.UrlEncode(pkey)))
End If
End If
End Sub
如果禁用行选择不是一个选项,那么您可以通过添加包含基本 html 按钮或具有 id
和 [=13 的 img 图标的未绑定模板字段来执行类似的操作=] 属性设置,以便您可以在 RowDataBound 事件中找到控件,然后只需应用相同的 onclick 逻辑。使用此方法的主要目的是确保您使用的控件不会触发回发。
(我不记得将 gridview 保留为可选状态是否仍会触发 Select 回发,如果是这样,我认为这只是从视图弹出函数返回 false 或调用 preventDefault 或取消气泡 - 已经有一段时间了:))
关于安全的另一件事。将 Pkeys 作为参数发送是一种不好的做法,至少,如果必须以这种方式传递参数,则应该对其进行加密。更好的选择是会话变量。我会留给你。祝你好运。
我有一个 ASP.NET 4.0 网络应用程序。
应用程序有两个新页面:
- openInvoice.aspx 包含一个网格视图。其中一列是 ID,它是一个 link 按钮并调用 "select" 命令。 "select" 将 datakeyname ID 传递给 reportviewer。
- reportviewer.aspx 包含报表查看器、ObjectDatasource 和报表路径 (invoice.rdlc)。
截至目前,我可以在 gridview 中单击 ID 并完成重定向以转到报告。但我想做的是在 openInvoice.aspx 内的弹出窗口 window 中打开 reportviewer.aspx,这样就不必进行重定向并强制用户按下浏览器中的后退按钮.
这可以吗?如果是这样,如何?
应该很简单,因为您有一个包含报告查看器的专用页面
我使用 jQuery 和 ColorBox。您只需要设置适当的选项。像这样:
function ViewPopUpReport(id) {
var options = {
iframe: true,
href : null
// there are many more parameters available, this is just the short list to keep it simple
}
options.href = 'reportviewer.aspx?id=' + id;
$.colorbox(options);
}
这是关键。 Select处理报告会导致回发。那必须停止。最简单的方法是禁用 Gridview 上的行选择并替换你自己的 onclick(注意:我在 VB 工作,但你应该能够很容易地转换它):
Private Sub YourGridView_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles YourGridView.RowDataBound
Dim gv As GridView = sender
If e.Row.RowType = DataControlRowType.DataRow Then
Dim pkey As String = gv.DataKeys(e.Row.RowIndex).Values("your_report_id")
If pkey IsNot Nothing Then
e.Row.Attributes.Add("onclick", String.Format("ViewPopupReport('{0}');", Server.UrlEncode(pkey)))
End If
End If
End Sub
如果禁用行选择不是一个选项,那么您可以通过添加包含基本 html 按钮或具有 id
和 [=13 的 img 图标的未绑定模板字段来执行类似的操作=] 属性设置,以便您可以在 RowDataBound 事件中找到控件,然后只需应用相同的 onclick 逻辑。使用此方法的主要目的是确保您使用的控件不会触发回发。
(我不记得将 gridview 保留为可选状态是否仍会触发 Select 回发,如果是这样,我认为这只是从视图弹出函数返回 false 或调用 preventDefault 或取消气泡 - 已经有一段时间了:))
关于安全的另一件事。将 Pkeys 作为参数发送是一种不好的做法,至少,如果必须以这种方式传递参数,则应该对其进行加密。更好的选择是会话变量。我会留给你。祝你好运。