2013-08-26 2 views
0

Мое требование состоит в том, чтобы генерировать/печатать маркер всех учеников определенного класса за один клик в отчете о кристалле.Печать Crystal Report в цикле

Когда я использовал для цикла то это показывает только последний запись/страницы отчета.

И Мой код

частная пустота btnGenerate_Click (объект отправителя, EventArgs е) {

 try 
     { 
      axCrystalActiveXReportViewer1.ReportSource = null; 

      ReportDocument cryRpt = new ReportDocument(); 
      TableLogOnInfos crtableLogoninfos = new TableLogOnInfos(); 
      TableLogOnInfo crtableLogoninfo = new TableLogOnInfo(); 
      ConnectionInfo crConnectionInfo = new ConnectionInfo(); 
      Tables CrTables; 


      crConnectionInfo.ServerName = Configuration.ServerName; 
      crConnectionInfo.DatabaseName = Configuration.DataBaseName; 
      crConnectionInfo.UserID = Configuration.Server_userName; 
      crConnectionInfo.Password = Configuration.Server_password; 



      CrTables = cryRpt.Database.Tables; 
      foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables) 
      { 
       crtableLogoninfo = CrTable.LogOnInfo; 
       crtableLogoninfo.ConnectionInfo = crConnectionInfo; 
       CrTable.ApplyLogOnInfo(crtableLogoninfo); 
      } 

      for(int i=0; i<=x; i++) 
      { 
       DataSet ds_ViewTermMarkSheet = new DataSet(); 
       Hashtable htViewTermMarkSheet = new Hashtable(); 

       htViewTermMarkSheet.Add("@Year", txtYear.Text); 
       htViewTermMarkSheet.Add("@Faculty", cboFaculty.Text); 
       htViewTermMarkSheet.Add("@Level", cboClass.Text); 
       htViewTermMarkSheet.Add("@Section", cboSection.Text); 
       htViewTermMarkSheet.Add("@term", cboTerm.Text); 
       htViewTermMarkSheet.Add("@CRN",.ToString()); 

       DbOperations _dbAccess = new DbOperations(); 
       _dbAccess.selectStoredProcedure(ds_ViewTermMarkSheet, "spSelectExamView_Exam_TermWiseMarkSheet", htViewTermMarkSheet, "Marks"); 





      cryRpt.SetDataSource(ds_ViewTermMarkSheet.Tables["Marks"]); 
      } 



       axCrystalActiveXReportViewer1.Refresh(); 


      cryRpt.Close(); 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Mark Sheet generation was not successful.\r" + ex.Message, "Error!"); 
     } 
    } 

, как я могу добавить несколько marksheet сразу и распечатать их сразу ??

ответ

0

Вы должны назвать:

cryRpt.SetDataSource(ds_ViewTermMarkSheet.Tables["Marks"]); 

..from из стороны для цикла

В течение цикла заполнения ваш DataTable со всей информацией, необходимой вам. а затем из из стороны петли называют SetDataSource() method.

Приветствия

0

Ваш код будет петли и установить DataSource несколько раз, но будет обновить отчет только для последнего. Вы должны переместить обновления Indice цикла атакже печати отчета есть:

 cryRpt.SetDataSource(ds_ViewTermMarkSheet.Tables["Marks"]); 
     axCrystalActiveXReportViewer1.Refresh(); 
     // print the rpeort 
     } 

Правильный способ справиться с этим, чтобы создать отчет, который показывает информацию обо всех студентах. Вы можете группировать по идентификатору или имени ученика и устанавливать новую страницу после группы. Затем распечатайте этот отчет (всего 1 раз).

Смежные вопросы