ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 크리스탈리포트 보고서를 로드하지 못했습니다.
    프로젝트 2016. 11. 25. 17:12
    반응형

    C#으로 만든 프로그램 안에 

    크리스탈리포트로 만든 문서를 인쇄할 때 70장 이상 연속해서 인쇄하려고 하면

    자꾸 보고서를 로드하지 못했습니다. 메시지가 나온다.

    중간에 되다 말긴 하지만 이 에러메시지에 있는 확인 버튼을 누르면 인쇄는 된다.


    이걸 어찌 해결해야 하나.


    내가 짠 코드에  무슨 문제가 있는 걸까....


            private void btn_AllPrint_Click(object sender, EventArgs e)
            {
                if (dgv_UserList.Rows.Count > 0)
                {
                    for (int i = 0; i < dgv_UserList.Rows.Count; i++)
                    {
                        SqlCommand _SqlCmd = new SqlCommand();
                        _SqlCmd.Parameters.Add("@FDate", SqlDbType.VarChar).Value = dtpk_FDdate.Value.ToString("yyyyMMdd");
                        _SqlCmd.Parameters.Add("@TDate", SqlDbType.VarChar).Value = dtpk_TDdate.Value.ToString("yyyyMMdd");
                        _SqlCmd.Parameters.Add("@UserID", SqlDbType.BigInt).Value = Int64.Parse(dgv_UserList.Rows[i].Cells["colUUserID"].Value.ToString());
                        _DataClass.ExecuteAdapterSP("sp_Report_PersonAtt", _SqlCmd);
                        dgv_ReportDayAtt.DataSource = getDataTable(_DataClass.ReturnDataSet);
                        ResetData();
     
                        DataSet1 ds = new DataSet1();
                        DataTable dt = ds.Tables.Add("PersonAtt");
                        DataRow dr1;
     
                        dt.Columns.Add("tbDate", Type.GetType("System.String"));
                        dt.Columns.Add("tbWorkType", Type.GetType("System.String"));
                        dt.Columns.Add("tbWorkIn", Type.GetType("System.String"));
                        dt.Columns.Add("tbWorkOut", Type.GetType("System.String"));
     
                        dt.Columns.Add("tbWorkTime", Type.GetType("System.String"));
                        dt.Columns.Add("tbEarlyWorkIn", Type.GetType("System.String"));
                        dt.Columns.Add("tbExWorkTime", Type.GetType("System.String"));
                        dt.Columns.Add("tbFoodEx", Type.GetType("System.String"));
                        dt.Columns.Add("tbDeadNight", Type.GetType("System.String"));
                        dt.Columns.Add("tbOvertime", Type.GetType("System.String"));
                        dt.Columns.Add("tbExOvertime", Type.GetType("System.String"));
                        dt.Columns.Add("tbLateness", Type.GetType("System.String"));
                        dt.Columns.Add("tbEarlyLeave", Type.GetType("System.String"));
                        dt.Columns.Add("tbFlunk", Type.GetType("System.String"));
                        dt.Columns.Add("tbWeekendHol", Type.GetType("System.String"));
     
                        if (dgv_ReportDayAtt.Rows.Count > 0)
                        {
                            //sum12 = "0";
     
                            for (int rrr = 6; rrr < dgv_ReportDayAtt.Rows.Count; rrr++)
                            {
                                dr1 = dt.NewRow();
     
                                dr1["tbDate"= dgv_ReportDayAtt.Rows[rrr].Cells[4].Value.ToString();
                                dr1["tbWorkType"= dgv_ReportDayAtt.Rows[rrr].Cells[6].Value.ToString();
                                dr1["tbWorkIn"= dgv_ReportDayAtt.Rows[rrr].Cells[7].Value.ToString();
                                dr1["tbWorkOut"= dgv_ReportDayAtt.Rows[rrr].Cells[8].Value.ToString();
                                dr1["tbWorkTime"= dgv_ReportDayAtt.Rows[rrr].Cells[9].Value.ToString();
                                dr1["tbEarlyWorkIn"= dgv_ReportDayAtt.Rows[rrr].Cells[10].Value.ToString();
                                dr1["tbExWorkTime"= dgv_ReportDayAtt.Rows[rrr].Cells[11].Value.ToString();
                                dr1["tbFoodEx"= dgv_ReportDayAtt.Rows[rrr].Cells[12].Value.ToString();
                                dr1["tbDeadNight"= dgv_ReportDayAtt.Rows[rrr].Cells[13].Value.ToString();
                                dr1["tbOvertime"= dgv_ReportDayAtt.Rows[rrr].Cells[14].Value.ToString();
                                dr1["tbExOvertime"= dgv_ReportDayAtt.Rows[rrr].Cells[15].Value.ToString();
                                dr1["tbLateness"= dgv_ReportDayAtt.Rows[rrr].Cells[17].Value.ToString()
                                dr1["tbEarlyLeave"= dgv_ReportDayAtt.Rows[rrr].Cells[18].Value.ToString();
                                dr1["tbFlunk"= dgv_ReportDayAtt.Rows[rrr].Cells[19].Value.ToString();
                                dr1["tbWeekendHol"= dgv_ReportDayAtt.Rows[rrr].Cells["colWeekHoli"].Value.ToString();
     
                                dt.Rows.Add(dr1);
                            }
                        }
     
                        try
                        {
     
       개인근태현황3 doc = new 개인근태현황3();
     ⓐ .................   doc.SetDataSource(ds.Tables[2]);
     
                            doc.SetParameterValue("특이사항", textBox3.Text);
     
                            // 크리스탈리포트 매개변수 전달
                            doc.SetParameterValue("부서""부서:" + dgv_UserList.Rows[i].Cells[5].Value.ToString());
                            doc.SetParameterValue("직위""직위:" + dgv_UserList.Rows[i].Cells[7].Value.ToString());
                            doc.SetParameterValue("성명""성명:" + dgv_UserList.Rows[i].Cells[8].Value.ToString());
                            doc.SetParameterValue("조회기간"string.Format("조회기간:{0}~{1}", dtpk_FDdate.Value.ToString("yyyy년 M월 d일"), dtpk_TDdate.Value.ToString("yyyy년 M월 d일")));
                            doc.SetParameterValue("사번""사번:" + dgv_UserList.Rows[i].Cells[10].Value.ToString());                    
                            doc.SetParameterValue("합계1"string.Format("출근 {0}, 결근 {1}",txtT_Chul.Text,txtT_Gyul.Text));
                            doc.SetParameterValue("합계2", mtxtT_TWorkTime.Text);
                            doc.SetParameterValue("합계3", mtxtT_TJochulTime.Text);
                            doc.SetParameterValue("합계4", mtxtT_TOTTime.Text);
                            doc.SetParameterValue("합계5", mtxtT_TAddOTTime.Text);
                            doc.SetParameterValue("합계6", mtxtT_TYaTime.Text);
                            doc.SetParameterValue("합계7", mtxtT_TTukTime.Text);
                            doc.SetParameterValue("합계8", mtxtT_TTukOTTime.Text);
                            doc.SetParameterValue("합계9", mtxtT_TLateTime.Text);
                            doc.SetParameterValue("합계10", mtxtT_TEarlyTime.Text);
                            doc.SetParameterValue("합계11", mtxtT_TPaidTime.Text);
                            doc.SetParameterValue("합계12", txtT_Juhu.Text);
     
                            
                            //doc.PrintToPrinter(1, true, 1, 1); 인쇄, 테스트를 위해 잠시 주석처리
    doc.Close();
    doc.Dispose();

                            
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
     
                    }
                }
            }    

    cs


    원인과 해결 방법을 알아냈다.

    내 경우에, 크리스탈리포트에서 보고서를 로드하지 못했습니다.

    라고 에러가 나던 원인은 메모리 부족 현상이었다.

    데이터베이스에 연결할 때도 작업이 끝나면 꼭 Close()를 해줘야 하는데

    이와 비슷한 이유였던 것이다.

    크리스탈리포트 문서를 인쇄를 하든, 불러오든 작업이 끝났으면

     그 다음엔 doc.Close()와 doc.Dispose()를 해서 

    더 이상 메모리를 차지하지 않게 하자.


    반응형

    댓글

Designed by Tistory.