是否可以在弹出窗口中显示报表查看器?

时间:2015-01-14 16:18:34

标签: c# asp.net gridview reportviewer

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

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

  • openInvoice.aspx包含gridview。其中一列是ID,它是一个链接按钮并调用" select"命令。 "选择"将datakeyname ID传递给reportviewer。
  • reportviewer.aspx包含报告查看器,ObjectDatasource和报告的路径(invoice.rdlc)。

截至目前,我可以在gridview中点击ID,然后进行重定向以转到报告。但我想做的是在openInvoice.aspx内的弹出窗口中打开reportviewer.aspx,不必进行重定向,并强制用户按下浏览器中的后退按钮。

这可能吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:0)

应该很简单,因为您有一个包含reportviewer的专用页面

我使用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按钮的未绑定模板字段或者设置了idrunat=server属性的img图标来做类似的事情。可以在RowDataBound事件中找到控件,然后只应用相同的onclick逻辑。此方法的主要功能是确保使用不触发回发的控件。

(我不记得是否将gridview作为可选择仍然会触发Select回发,如果是这样的话,我认为这只是从视图弹出功能返回false或者调用preventDefault或取消冒泡的问题 - 这是一个而:))

安全性还有一件事。将Pkeys作为参数发送是不好的做法,至少,如果你必须以这种方式传递参数,它应该被加密。更好的选择是会话变量。我会留给你的。祝你好运。