是否可以在弹出窗口中使用报表查看器

本文关键字:报表 窗口 是否 | 更新日期: 2023-09-27 18:37:27

我有一个 ASP.NET 4.0 Web应用程序。

该应用程序有两个新页面:

  • 打开发票.aspx 包含一个网格视图。其中一列是 ID,它是一个链接按钮并调用"选择"命令。"选择"将数据密钥名称 ID 传递给报表查看器。
  • 报表查看器.aspx包含报表查看器、对象数据源和报表的路径 (invoice.rdlc)。

截至目前,我可以在网格视图中单击ID,然后完成重定向以转到报告。但我想做的是在 openInvoice 内的弹出窗口中打开报表查看器.aspx.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);
}

这是踢球者。 选择报表会导致回发。 这种情况必须停止。 最简单的方法是在 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 按钮或 img 图标,该图标设置了idrunat=server属性,以便您可以在 RowDataBound 事件中找到控件,然后只需应用相同的 onclick 逻辑。 此方法的主要内容是确保使用不触发回发的控件。

(我不记得将网格视图保留为可选是否仍然会触发选择回发,如果是这样,我认为这只是从视图弹出函数返回 false 的问题,或者可能是调用阻止默认或取消气泡 - 已经有一段时间了:))

关于安全性的另一件事。 将 Pkeys 作为参数发送是一种不好的做法,至少,如果必须以这种方式传递参数,则应对其进行加密。 更好的替代方法是会话变量。 我就交给你了。 祝你好运。