2011-01-20 4 views
1

GridView 확인란을 기반으로 보고서를 인쇄하려고합니다. 3 행을 선택했다면 3 개의 보고서 여야합니다. 내 코드 ASP.NET GridView, RDLC를 사용하여 여러 보고서를 인쇄하는 방법?

protected void btn_Print_Click(object sender, EventArgs e) 
    { 
     if (IsPostBack) 
     { 
      try 
      { 
       foreach (GridViewRow gvr in grdRV.Rows) 
       { 
        RadioButton rbID = (RadioButton)gvr.FindControl("rbID") as RadioButton; 

        if (rbID != null && rbID.Checked) 
        { 
         string sID = grdRV.DataKeys[gvr.RowIndex].Value.ToString().Trim(); 

         if (rbl_Print.SelectedValue == "0") 
         { 
          SMTP(sID); 
         } 
         else if (rbl_Print.SelectedValue == "1") 
         { 
          Material(sID); 
         } 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       Session["error"] = ex.Message; 
       Response.Redirect("MessageBoard.aspx"); 
      } 
     } 
    } 

private void Material(string sID) 
    {    

     string querystring = "../pmis/Reports/RptRFQMatV.aspx?RFQNo=" + lblRFQNo.Text.ToString() + "&ID=" + sID; 

     Random r = new Random();    
     string Script = ""; 
     Script += "<script language=JavaScript id='PopupWindow'>"; 
     Script += "confirmWin = window.open(' " + querystring + "','" + r.Next() + "','scrollbars=yes,resizable=1, width=960,height=500,left=50,top=130,status');"; 
     Script += "confirmWin.Setfocus()</script>"; 

     //ClientScript.RegisterStartupScript(typeof(string), "PopupScript", "PopupWindow"); 
     if (!ClientScript.IsClientScriptBlockRegistered("PopupWindow")) 
      ClientScript.RegisterClientScriptBlock(typeof(string), "PopupWindow", Script); 
    } 

현재이 코드는 누가 나를 도울 수 ... 마지막 행을보고 인쇄 할 수 있습니다 ...이처럼? 감사합니다

+0

이 코드에 중단 점을 설정하면 어떻게됩니까? 왜 당신이 기대하는 3을 잡지 못하는 걸까요? –

+0

@ p.campbell : 3 개의 행을 선택했다고 가정 해 보겠습니다. 3 개의 ID가 있습니다. 예 : A0031, A0027, A0051. 먼저 A0031은 A0027을 마친 후 A0051을 마친 후 재질 블록으로 이동합니다. 따라서 A0051에 대해서만 보고서가 나옵니다. 다른 두 ID는 나오지 않습니다. 덮어 쓰기 또는 뭔가있을 수 있습니다 ... – CMMaung

답변

2

나는 이것을 테스트하고 세 개의 창이 열리므로 선택된 ID 목록을 재료에 전달하여 조금만 수정해야하므로 재료를 한 번만 호출 할 수 있습니다. 당신의 문자열 조작에 재료 내부, 다음 줄 후,

Script += "<script language=JavaScript id='PopupWindow'>"; 

선택한 ID를하지만 이동 및 window.open을 추가 루프를 추가 할 수 있습니다. 따라서 다음 줄은 for/foreach 루프에 있어야합니다.

string querystring = "../pmis/Reports/RptRFQMatV.aspx?RFQNo=" + lblRFQNo.Text.ToString() + "&ID=" + sID; 


Script += "confirmWin = window.open(' " + querystring + "','" + r.Next() + "','scrollbars=yes,resizable=1, width=960,height=500,left=50,top=130,status');"; 

다음 줄이 뒤 따르고 for 루프 외부에 있습니다.

Script += "confirmWin.Setfocus()</script>"; 

     //ClientScript.RegisterStartupScript(typeof(string), "PopupScript", "PopupWindow"); 
     if (!ClientScript.IsClientScriptBlockRegistered("PopupWindow")) 
      ClientScript.RegisterClientScriptBlock(typeof(string), "PopupWindow", Script); 

이것은 본보기 예이며 작동합니다. 또한 문자열 + =

 string Script = ""; 
     Script += "<script language=JavaScript id='PopupWindow'>"; 
     Script += "window.open('www.google.com.au', '1','scrollbars=yes,resizable=1, width=960,height=500,left=50,top=130,status');"; 
     Script += "window.open('www.yahoo.com','2','scrollbars=yes,resizable=1, width=960,height=500,left=50,top=130,status');"; 
     Script += "window.open('www.stackoverflow.com','3', 'scrollbars=yes,resizable=1, width=960,height=500,left=50,top=130,status');"; 
     Script += "</script>"; 

     if (!ClientScript.IsClientScriptBlockRegistered("PopupWindow")) 
      ClientScript.RegisterClientScriptBlock(typeof(string), "PopupWindow", Script); 

대신 StringBuilder를 사용하면 더 좋을 것입니다.

+0

@CMMaung : 내 예제는 개념 증명이기 때문에 정적 데이터를 사용하고 있습니다. 위의 예를 읽고 나면 괜찮을 것이라고 생각합니다. 그리고이 코드가 서버 측을 실행하면서 응답이 마침내 클라이언트 측에 도달 할 때 항상 한 번에 창을 열어서 전체 루프가 완료 될 때 창을 열면 어떻게 중요합니까? 아마도 귀하의 요구 사항을 완전히 이해하지 못할 수도 있습니다. – Divi

관련 문제