2011-12-19 15 views
0

以下のコードを使用して、結晶レポート&のレポートソースを設定します。プロジェクトに&というDataSetを追加して、そのDataSetにDataTableを追加しました。 DataTableの名前は "my_dt" &、DataSetの名前は "MyDataSet"です。 "my_dt" DataTableには、データベースの "出席"テーブルと一致する3つの列があります。 「Start Debugging」を押すと、エラーが表示されません&空白のレポートが表示されます。 "Start Without Debugging"を押すとこのエラーが出ます。何が間違っているのか分かりません。助けてください、どんな助けも大いに感謝されるでしょう。Crystal Reportを読み込む際に「インデックスが配列の境界外にあります」というエラーが表示されるのはなぜですか?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using System.Data.OleDb; 
using System.IO; 

namespace CrystalReportWithAccess 
{ 
    public partial class frmMain : Form 
    { 
     public frmMain() 
     { 
      InitializeComponent(); 
     } 

     private void frmMain_Load(object sender, EventArgs e) 
     { 
      my_rpt objRpt; 
      // Creating object of our report. 
      objRpt = new my_rpt(); 

      String ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\CentreDB.mdb;Jet OLEDB:Database Password=pass"; 

      OleDbConnection myConnection = new OleDbConnection(ConnStr); 

      String Query1 = "SELECT * FROM [Attendance]"; 

      OleDbDataAdapter adapter = new OleDbDataAdapter(Query1, ConnStr); 

      DataSet Ds = new DataSet(); 

      // here my_dt is the name of the DataTable which we 
      // created in the designer view. 
      adapter.Fill(Ds, "my_dt"); 

      if (Ds.Tables[0].Rows.Count == 0) 
      { 
       MessageBox.Show("No data Found", "CrystalReportWithAccess"); 
       return; 
      } 

      // Setting data source of our report object 
      objRpt.SetDataSource(Ds); 

      CrystalDecisions.CrystalReports.Engine.TextObject root; 
      root = (CrystalDecisions.CrystalReports.Engine.TextObject) 
       objRpt.ReportDefinition.ReportObjects["txt_header"]; 
      root.Text = "Sample Report By Using Data Table!!"; 

      // Binding the crystalReportViewer with our report object. 
      crystalReportViewer1.ReportSource = objRpt; 
     } 
    } 
} 

答えて

3

あなたはDs.Tablesobjectを使用して、任意の要素を持っているかどうかを確認する必要があります。

Ds.Tables.Count > 0

をそして使用しているあなたの例では:

if (Ds.Tables.Count > 0 && Ds.Tables[0].Rows.Count == 0) 
{ 
    MessageBox.Show("No data Found", "CrystalReportWithAccess"); 
    return; 
} 

ReportObjectsがいずれかを持っているかどうかをチェックしてみその中のアイテム。

if(objRpt.ReportDefinition.ReportObjects.Count > 0){ 

} 
+0

私の無知を許してください。しかし、Ds.Tables.Lengthプロパティを使用するためにusingディレクティブを追加する必要がありますか?それは私が参照を欠いていると言います。 – Ramila

+0

いいえ、 'Length'ではなく' Count'を使用する必要があります – Gabe

+0

ああ、私はそれを使用しましたが、私はまだ同じエラーが発生しますか? – Ramila

関連する問題