PDF を作成し、それを新しいウィンドウ (または新しいタブですが、現在は新しいウィンドウで動作しています) で開こうとしています。
これが私のaspxコードです。リンク ボタンは、更新パネルにあるパネルにある GridView にあります (はい、更新パネルとこれに問題がある人を見てきましたが、この方法で行う必要があります)。
<ItemTemplate>
<asp:LinkButton ID="ReportLink" runat="server" CommandName="GenReport"
CommandArgument='<%# Container.DataItemIndex %>'
OnClientClick="LoadPDF()" PostBackUrl="~/Indices/myPDF.aspx"
Text="View Report" ToolTip="Genereate a PDF of the Report"></asp:LinkButton>
</ItemTemplate>
これが新しいウィンドウを開く私のjavascriptです
function LoadPDF() {
window.open('myPDF.aspx', '',
'scrollbars=no,menubar=no,height=600,width=800,resizable=yes,toolbar=no,location=no,status=no');
}
ここにC#があります。最初のスニペットは、リンクボタンがクリックされたときに呼び出されるものです (javascript の後)。2 つ目は、実際に PDF を作成し、それを新しいウィンドウに送信しようとするメソッドです。
{
DataTable dt = (DataTable)Session["IndexTable"]; //copy of the GirdView
int rowIndex = Convert.ToInt32(e.CommandArgument.ToString());
DataRow row = dt.Rows[rowIndex];
GenerateReport(row["ITEM_ID"].ToString());
}
private void GenerateReport(string itemID)
{
OracleConnection connection = new OracleConnection(connstr);
try
{
connection.Open();
//code here omitted, all sql and setting up info for the doc
// giving TurnOverData a dataset
ReportDocument doc = new ReportDocument();
doc.FileName = Server.MapPath("myRpt.rpt");
doc.SetDataSource(TurnoverData);
//here adding parameters to doc
System.IO.MemoryStream stream = (System.IO.MemoryStream)doc.ExportToStream(ExportFormatType.PortableDocFormat);//leftover code from previous functionality (i dont think it is doing anything)
BinaryReader Bin = new BinaryReader(doc.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat));
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType="application/pdf";
Response.BinaryWrite(Bin.ReadBytes(Convert.ToInt32(Bin.BaseStream.Length)));
Response.Flush();
Response.Close();
}
catch (Exception ex)
{
Logger.logError("GenerateReport() " + ex.Message);
Utilities.SendAnAlert(this, "An error occurred while generating PDF file and the file could not be displayed.");
}
finally
{
connection.Close();
connection.Dispose();
}
}
前もって感謝します
アップデート:
古いコードを掘り下げた後、回避策を見つけました。皆さんが私に提案してくれたほとんどすべてのコードは、すでに私たちのコードに含まれていました。LoadPDF関数を使用することになりましたが、URLが「?=」を使用しているため、文字列引数を渡す必要がありました。すべての助けに感謝します!