【C#】データベース未使用でのレポートの表示

このQ&Aのポイント
  • C#を使用してデータベースを使用せずにレポートを表示する方法について質問です。
  • Visual Studio 2008でForm1で入力した値をActiveReport3.0に渡し、Form2のViewerにセットする方法を考えています。
  • デバッグ中にエラーが発生し、名前空間 'DataDynamics.ActiveReports' に存在しない 'ActiveReport' というエラーメッセージが表示されます。解決策を教えてください。
回答を見る
  • ベストアンサー

【C#】 データベース未使用でのレポートの表示

初めまして。C#でどういても分からないことがあって質問させていただきました。 現在、VisualStadio2008でForm1で入力した値を、ボタンを押すことでActiveReport3.0に渡し、 Form2のViewerにセットしようと考えているところです。 public Form1() { InitializeComponent(); } private void print_Click(object sender, EventArgs e) { NewActiveReport1 report = new NewActiveReport1(); report.Run(); Form2 form2 = new Form2(); form2.setDocument(report.Document); form2.Show(); } private void Form1_Load(object sender, EventArgs e) { } public Form2() { InitializeComponent(); } public void setDocument(DataDynamics.ActiveReports.Document.Document doc) { this.viewer1.Document = doc; } private void viewer1_Load(object sender, EventArgs e) { } public void ActiveReport_DataInitialize() { this.Fields.Add("1lbl"); this.Fields.Add("2lbl"); this.Fields.Add("txt1"); this.Fields.Add("txt2"); } public bool ActiveReport_FetchData(object sender, DataDynamics.ActiveReports.ActiveReport. FetchEventArgs eArgs) { try { m_reader.Read(); Fields["1lbl"].Value = m_reader["lbl1"].ToString(); Fields["2lbl"].Value = m_reader["lbl2"].ToString(); Fields["txt1"].Value = m_reader["txt1"].ToString(); Fields["txt2"].Value = m_reader["txt2"].ToString(); eArgs.EOF = false; } catch { eArgs.EOF = true; } return eof; } これをデバッグして、ボタンを押すと強制終了して、[ report.Run(); ]に 「Report Script Compile Error on line 15 Error = 型または名前空間名 'ActiveReport' は 名前空間 'DataDynamics.ActiveReports' に存在しません。アセンブリ参照が不足しています。」 と、表示されてしまいます。どうしたらよいでしょうか? タイトルの通り、DB接続は行いません。また、Form1にはlabel2個、TextBoxが2個セットしてあります。

質問者が選んだベストアンサー

  • ベストアンサー
  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.4

DBを使わないはずなのにDataReaderが出てくる理由がよくわかりません…… http://intd.componentone.com/arJPhelp_Internal_v7/GrapeCity.ActiveReports.v7~GrapeCity.ActiveReports.SectionReport~FetchData_EV.html ↑のURLあたりのコードをそのまま引っ張ってきたのかもしれませんが、 これはレポートスクリプトに書くコードではなく、本体側(NewActiveReport1側)に書くコードです。 (そもそも、要件的にFetchDataイベントを使うのが適切がどうかも疑問です) このあたりが参考になるかと思います(バージョンは違うので注意)。 http://www.grapecity.com/tools/support/technical/knowledge_detail.asp?id=33914

その他の回答 (3)

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.3

と思ったらバグ関係なかったorz FetchDataイベントの引数はコード側とレポートスクリプト側とで異なりますので、 製品ヘルプを参照の上、正しい引数を指定してください。 ↓コード側の書き方 public bool ActiveReport_FetchData(object sender, DataDynamics.ActiveReports.ActiveReport. FetchEventArgs eArgs) ↓レポートスクリプト側の書き方 public bool ActiveReport_FetchData(bool eof)

xeo000
質問者

補足

返答ありがとうございます。さっそく、ご指摘いただいた通りに修正を行ってみました。 ついでに、DataReaderの宣言が無かったので追加しました。 修正後のコードです↓ private DataReader dataReader; public void ActiveReport_DataInitialize() { this.Fields.Add("1txt"); this.Fields.Add("2txt"); this.Fields.Add("1lbl"); this.Fields.Add("2lbl"); } public bool ActiveReport_FetchData(bool eof) { Fields["1txt"].Value = dataReader["txt1"].ToString(); Fields["2txt"].Value = dataReader["txt2"].ToString(); eof = true; return eof; } Report Script Compile Error on line 6 Error = 型または名前空間名 'DataReader' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.2

質問文の中にあったのですね……。 どこからどこまでがどのファイルのコードなのかを明記していただけると助かります。 FetchDataイベントの引数が記憶しているものと違ったので調べてみたところ、 スクリプトエディタにバグがあったようです。 http://www.grapecity.com/tools/support/technical/knowledge_detail.asp?id=24686

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.1

エラーメッセージに"Report Script Compile Error"と書いてあるのですから、 まず確認すべきはレポートのスクリプトです。

xeo000
質問者

補足

回答ありがとうございます。レポートのスクリプトは、 public void ActiveReport_DataInitialize() { this.Fields.Add("1lbl"); this.Fields.Add("2lbl"); this.Fields.Add("txt1"); this.Fields.Add("txt2"); } public bool ActiveReport_FetchData(object sender, DataDynamics.ActiveReports.ActiveReport. FetchEventArgs eArgs) { try { m_reader.Read(); Fields["1lbl"].Value = m_reader["lbl1"].ToString(); Fields["2lbl"].Value = m_reader["lbl2"].ToString(); Fields["txt1"].Value = m_reader["txt1"].ToString(); Fields["txt2"].Value = m_reader["txt2"].ToString(); eArgs.EOF = false; } catch { eArgs.EOF = true; } return eof; } です。

関連するQ&A

  • C# フォーム追加後、旧フォームを閉じたい

    前略 ・C#で教えてください。 ・Form1 からshowDiag()メソッドでForm2をつくります。Form2が表示されたら非アクティブとなったForm1を閉じたいのですが どのようにしたらよいのかおしえてください。  下記は、Close() メソッドで Form2側から閉じようとしたプログラムですがFrom1を閉じることができません。 よろしくお願いします。 //----------------------------------------------- namespace formClose { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.ShowDialog(); } }   public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void Form2_Load(object sender, EventArgs e) { Form1 form1 = new Form1(); form1.Close(); //Form1が閉じない!! } private void button1_Click(object sender, EventArgs e) { this.Close(); //Form2を閉じる }    } } 以上

  • C# 関数はどこに書くの?

    c#を始めました。 関数はどこに書けばよいのだろうと思い以下の2つのパターンを書きました。どちらも実行するとちゃんと動いています。 どちらの書き方が正しいのでしょうか?よろしくお願いいたします。 パターン1 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int a=3; int n= tasu(a); MessageBox.Show(n.ToString());   //ここに関数を書く int tasu(int a10) { return a10 - 2; } } } パターン2 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int a=3; int n= tasu(a); MessageBox.Show(n.ToString()); }   //ここに関数を書く int tasu(int a20) { return a20 -1; } }

  • c# イベントハンドラ 統一

    trackBarを複数配置しているのですが、そのtrackBarごとに private void trackBar1_Scroll(object sender, EventArgs e) { previewcolor(this.trackBar1.Value,'赤'); } private void trackBar2_Scroll(object sender, EventArgs e) { previewcolor(this.trackBar1.Value, '青'); } private void trackBar3_Scroll(object sender, EventArgs e) { previewcolor(this.trackBar1.Value, '緑'); } private void trackBar4_Scroll(object sender, EventArgs e) { previewcolor(this.trackBar1.Value, '透'); } こんな風に別々に記述する形になって非常にスッキリしないです。 これをジェネリクス?やデリゲート?などを使ってすっきりできないのでしょうか? visual stdio c# 2008を使ってます。 宜しくお願いします。

  • C# Formの操作

    Form2 form2 ; // 子 Form Form3 form3 ; // 子 Form private void button1_Click(object sender, System.EventArgs e) { form2 = new Form2() ; this.AddOwnedForm(form2) ; // 親 Form が form2 を所有する form2.Show() ; } private void button2_Click(object sender, System.EventArgs e) { form3 = new Form3() ; this.AddOwnedForm(form3) ; // 親 Form が form3 を所有する form3.Show() ; } 上記のようにボタン一つに対して1つのFormに対する処理をするのではなく,ボタン1つに対して 複数のFormを処理する.つまり 例えば,Form1,2,3とあったとして,Form1のボタンを押してFrom2を開き,そこで何らかの処理を したものをForm1に反映する.または,From3のボタンを押してForm2を開きそこで何らかの処理を 行いForm3に反映する. この場合,Form1とForm3のどちらのFormのボタンが押されたか判断しないといけないと思うのですが,ここの処理がうまくいきません. どちらかのFormのボタンを押してForm2を表示し,どちらかのFormに反映させる所までは出来たのですが,両方の判断材料を入れて,どちらのFormのボタンを押されたか判断する際に,押されなかった方が「null」となりエラーになります. 下記にこの判断部分を掲載いたします.どなたかご教授よろしくお願いいたします. Form1 public int but = 0; public int butt1; public string DB; public string HDB; public Form2 f2 = null; private void mybutton1_Click(object sender, EventArgs e) { butt1 = 1; ・ ・ ・ public int Ye=0; private void button43_Click(object sender, EventArgs e) { butt1 = 0; From2 public partial class Form2 : Form { Form1 f1; Form3 f3; public Form2(Form1 f) { f1 = f; // メイン・フォームへの参照を保存 InitializeComponent(); } public Form2(Form3 f) { f3 = f; // メイン・フォームへの参照を保存 InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { #region int Pin1 = f1.butt1; int Pin3 = f3.butt3; Form3 Form1と基本的には同じです.

  • 【C#】EventArgsについて

    いつもお世話になります。 C#に関して質問です。 VisualC#2008を使っています。 private void Form1_Load(object sender, EventArgs e) などで見かける、EventArgs e とは何を意味しているのでしょうか? 誰か教えていただけませんか? よろしくお願いします。

  • C#について・・・

    次のようなブログラムなのですが、ラジオボタンが上手く切り替わりません。 どこを修正すると上手くいくでしょうか? <<文字数オーバーのため省略>> public Form1() { // // Windows フォーム デザイナ サポートに必要です。 // InitializeComponent(); if(isJapanStyle) { label5.Text=string.Format("0時0分0秒"); label6.Text=string.Format("0時0分0秒"); } else { label5.Text=string.Format("00:00:00"); label6.Text=string.Format("00:00:00"); } // // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。 // <<文字数オーバーのため 省略>> static void Main() { Application.Run(new Form1()); } protected void button1_Click(object sender, System.EventArgs e) { if(isJapanStyle) { label5.Text=string.Format("{0}時{1}分{2}秒",dt.Hour,dt.Minute,dt.Second); } else { label5.Text=DateTime.Now.ToString("T"); } recTime=dt; timer2.Stop(); timer3.Start(); } private void button2_Click(object sender, System.EventArgs e) { Application.Exit(); } private void timer1_Tick(object sender, System.EventArgs e) { dt=DateTime.Now; if(isJapanStyle) { label4.Text=string.Format("{0}時{1}分{2}秒",dt.Hour,dt.Minute,dt.Second); } else { label4.Text=DateTime.Now.ToString("T"); } } private void timer3_Tick(object sender, System.EventArgs e) { keika=dt-recTime; if(isJapanStyle) { label6.Text=string.Format("{0}時間{1}分{2}秒",keika.Hours,keika.Minutes,keika.Seconds); } else { label6.Text=string.Format("{0}:{1}:{2}",keika.Hours,keika.Minutes,keika.Seconds); } } private void timer2_Tick(object sender, System.EventArgs e) { timer3.Stop(); } private void radioButton2_CheckedChanged(object sender, System.EventArgs e) { isJapanStyle=false; } private void radioButton1_CheckedChanged(object sender, System.EventArgs e) { isJapanStyle=true; } } }

  • C#で、DLL内の関数へのthisの渡し方

    例えば以下のように、thisを引数として渡して thisに格納されたWitdhを表示するコードを書いてみたのですが DLL側で以下のようなエラーが出てうまくいきません。 何か引数の渡し方などに問題があるのでしょうか?ご指導お願いします(>o<) ※エラー 'ClassLibrary1.Form1.Dispose(bool)': オーバーライドする適切なメソッドが見つかりませんでした。 ■フォームアプリケーションのコード private void Form1_Load(object sender, EventArgs e) {   System.Windows.Forms.Form This_obj = new System.Windows.Forms.Form();   This_obj = this;   GetFormWidth(This_obj); } ■↓DLL内のコード public class DLL {   public static void GetFormWidth(System.Windows.Forms.Form Form_obj) {     //引数のwidthを表示する。     System.Diagnostics.Debug.WriteLine(Form_boj.Width.Tostring());   } }

  • C#でオブジェクトの有無を取得する

    オブジェクトが作られている時と作られていない時で処理をわけたいのですがうまくいきません。 この書き方の何がまずいのでしょうか? namespace オブジェクト検索 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Control c = Controls["form2"]; if (c != null) { ((TextBox)c).Text += "*"; } } private void button2_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.Show(); Application.DoEvents(); } } } ボタン2を押した時に新しいフォームが立ち上がり、そのフォームがあるときは*が出るようにしたいです。

  • C#プログラムにて

    C#プログラムにて お世話になります。 C#初心者です。 プログラムコードを書き始めで、早速行き 詰っています。 ステップでコードの動きを確認したところ、 program.csのMainから下記のForm1.csに 移りForm1のデザイナが表示されるのですが、 button3を押してもForm3が表れません。 また、ステップの黄色いカーソルと言いますか ステップの位置情報も消えています。 何がどう悪いのか分からなく困っています。 どなたかご親切な方、ご教授頂きたく 宜しくお願い致します。     記 using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication3 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button3_Click(object sender, EventArgs e) { Form3 cForm3 = new Form3(); cForm3.ShowDialog(); } private void button2_Click(object sender, EventArgs e) { DialogResult ans; ans = MessageBox.Show("最新のコード表を照会しますか?", "Microsoft Visual Studio", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (ans == DialogResult.OK) Application.Exit(); } private void button12_Click(object sender, EventArgs e) { Form4 cForm4 = new Form4(); cForm4.ShowDialog(); } } }

  • C# コントロールの移動について

    数年のブランクののち、VB6からの乗り換えで、数日前から、C#を始めたところのまったくの素人ですが、よろしく。 起動時に、フォームは、指定の位置に移動・サイズ変更は反映しているのですが、 ピクチャアボックスの、移動は反映されません。 なぜでしょうか。 お手数ですが、素人にも理解できるように、ご教授ください。 ソース・・・ namespace C_TRY { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.Left = 200 ; // X位置 this.Top = 100; // Y位置 this.Width = 640; // 幅 this.Height = 480; // 高さ } private void pictureBox1_Layout(object sender, LayoutEventArgs e) { this.pictureBox1.Location = new Point(1000, 128); } } }

専門家に質問してみよう