2011-09-06 6 views
0

여러 Crystal 보고서를보기 위해 선택할 수있는 확인란이있는 웹 페이지가 있습니다. 새 탭이나 창에서이 보고서를 열려고합니다.ASP 페이지를 다른 두 페이지로 리디렉션하는 방법은 무엇입니까?

이 쇼 보고서 버튼입니다 : 나는이 시도

<asp:Button ID="Button2" runat="server" Text="Show Report" OnClick="ButtonShowReport_Click" 
         CssClass="button" OnClientClick="aspnetForm.target ='_blank';"/> 

을 그리고 이것은 내 GridView 컨트롤입니다 :

protected void ButtonShowReport_Click(object sender, EventArgs e) 
    { 
     string accountID; 
     int Rows = GridView1.Rows.Count; 
     for (int i = 0; i < Rows; i++) 
     { 
      //CheckBoxField cb = ((CheckBoxField)gvASH.Rows[i].Cells[1]).; 
      CheckBox cb = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("CheckBox1"); 
      if (cb.Checked == true) 
      { 
       accountID = ((Label)GridView1.Rows[i].FindControl("lblAccountID")).Text;//GridView1.DataKeys[i].Value.ToString();//GridView1.Rows[i].Cells[1].Text; 
       //Button2.Enabled = true; 
       openReport(accountID); 
      } 
     } 
    } 

    protected void openReport(string accountID) 
    { 
     //some code for setting parameters of the crystal report 
     //and for creating report key 

     Response.Redirect(string.Format("~/Report.aspx?ReportKey={0}", 
      ReportKey.ToString()),false); 
    } 

:

<asp:GridView ID="GridView1" runat="server" CellPadding="4" ForeColor="#333333" 
     RowStyle-HorizontalAlign="Center" AutoGenerateColumns="False" 
     DataKeyNames="AccountID"> 
     <RowStyle BackColor="#> 
     <Columns> 
      <asp:TemplateField HeaderText="Choose Client's Accounts"> 
       <ItemTemplate> 
        <asp:CheckBox ID="CheckBox1" runat="server"/> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField Visible="false"> 
       <ItemTemplate> 
        <asp:Label id="lblAccountId" runat ="server" text='<%# Eval("AccountID")%>'> 
        </asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:BoundField DataField="AccountID" HeaderText="AccountID" Visible="false"/> 
      <asp:BoundField DataField="AccountName" HeaderText="Account Name" /> 
      <asp:BoundField DataField="Name" HeaderText="Client Name" /> 
     </Columns> 
     <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
     <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> 
     <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> 
     <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
     <EditRowStyle BackColor="#2461BF" /> 
     <AlternatingRowStyle BackColor="White" /> 
</asp:GridView> 

내 C# 코드의 모습 따라서 사용자가 2 개의 보고서를 확인하고 ShowReport 버튼을 클릭하면 루프를 수행하지만 op 새 보고서에 마지막으로 선택한 보고서가 하나뿐입니다 ...

의견을 보내주십시오.

답변

0

리디렉션을 트리거하는 컨트롤에 추가합니다. 단추/LinkButtons, 체크 박스에서 작동하는지 확실하지 않은이 작동하는지 알아요. 당신이 고려할 수

OnClientClick="aspnetForm.target ='_blank';" 
+0

답글을 보내 주셔서 감사합니다 ... 사실 저는 그것을 추가했으며 수정 된 보고서를 새 탭에서 올바르게 엽니 다. 문제는 해당 페이지에서 마지막으로 확인한 보고서 만 열리는 반면 여러 탭에서 동시에 두 개 이상의 보고서를 열어야한다는 것입니다. – Fodjy

0

한 가지 방법 :

대신 뒤에 코드 내부의 각 보고서에 리디렉션을 수행하는

- 동적으로 각 보고서에 사용 된 window.open을 가지고 몇 가지 자바 스크립트를 생성합니다. 자바 스크립트는 다음과 유사합니다 :

<script type="text/javascript"> 
window.open("<report1URL>", "_blank"); 
window.open("<report2URL>", "_blank"); 
... 
window.open("<reportNURL>", "_blank"); 
</script> 

다음, 대신 Response.Redirect를 수행, 당신은 코드를 실행하는 브라우저를 얻을 수있는 Respone.Write()를 할 수 있어야합니다.

string myJavaScript= <dynamicallyGenerateJavascript>; 
Response.Write(myJavaScript); 
관련 문제