アプリ版:「スタンプのみでお礼する」機能のリリースについて

アクティブレポートの出力に関して教えて頂ければと思います。

印刷ボタン側(画面)の処理でデータセットへ格納し、それをアクティブレポートで出力しようと
考えていますが、どうしても上手く表示されません。

条件指定等でSQLを変化させたいと考えている為、どうしても印刷ボタン側(画面)でデータセット
に格納しています。

下記のような記述だけでは動かないのでしょうか。。。


《印刷ボタン側での処理》

private void btn_test_Click(object sender, EventArgs e)
{

// コネクション作成
//MySQL接続設定
string sqlcmd = "userid=XXXXXX;"
+ "password=999999;"
+ "database=db_syain;"
+ "Host=172.16.99.99";

MySqlConnection cn = new MySqlConnection(sqlcmd);
MySqlDataAdapter da = new MySqlDataAdapter("select * from t_syain", cn);

DataSet myds = new DataSet();

da.Fill(myds,"myTable");  //データセットに全て格納できている事は確認

Form6 frmForm6 = new Form6();
frmForm6.ShowDialog();

}

《受け取り側フォーム》

public partial class Form6 : Form
{
NewActiveReport3 rpt = new NewActiveReport3();  //アクティブレポート3へ出力を考えています。
public Form6()
{
InitializeComponent();

rpt.DataSource = "myds";
rpt.DataMember = "myTable";
this.viewer1.Document = rpt.Document;

rpt.Run();

}
}

A 回答 (1件)

 さてさて、これはデータセットのインスタンスがどこにあるか、という事になる。



 まず状況の再確認から。データセットとしてデータを準備する印刷ボタン押下イベントがあり、ActiveReportsViewerが貼り付けられている受け取り側フォームがある。ActiveReportsのレポートは受け取り側フォームのインスタンス変数となっている。
 恐らくDBからデータを取得してデータセットにFillするところまではうまくいっているのだろう。

 では、受け取り側フォームの中に用意したrptのDataSourceメンバーに設定したmydsだが、さてこれは「何を指している」のだろうか。
 rptのDataSourceメンバーとDataMemberメンバーに値を設定しているという事は、レポートはデータセットとバインドして出力していると推測できる(かどうかは正確には不明)。ところで、rptのDataSourceメンバーは自分自身のプロパティーに文字列(名前)でアクセスするために設定する。なので、データセットとのバインド(バウンド)の場合、わざわざプログラム上ではバインドされるデータセット名を指定するのではなく、型付のデータセットを用意してバインドし、そのデータセットインスタンスに対してデータを流し込んでやる方が良いだろう。
 改めてソースに対してレビューを行うと、問題点は印刷ボタンイベントでnewしたDataSetのインスタンスをどうやってNewActiveReport3クラスのインスタンスであるrptに受け渡しているか、だ。そこに関する記述が一切ないため、本当に無い(本当に受け渡していない)のか、受け渡しのプログラムは用意しているけど省略したのかが分からない。

 とりあえずrpt(NewActiveReport3クラス)を、アンバウンドでやるのかデータセットとのバウンドでやるのかをはっきりさせてはどうだろう。その方がどう直すかというヒントを得やすいのではないでしょーか。

 大まかな方向性は以下のようになるのではないかと思われる。
●アンバウンド→NewActiveReport3クラスにpublicなDataSetの変数mydsを用意し、データセットをnewしてDBからの内容をFillした後、rpt.mydsに代入する。NewActiveReport3クラスの各描画イベントでmydsのmyTableから1行ずつデータを取得して、レポートの各項目に値を埋めていく。
●バウンド→NewActiveReport3クラスにpublicなDataSetの変数mydsを用意し、データセットをnewしてDBからの内容をFillした後、rpt.mydsに代入する。その後はレポートの機能を使って適当にやる。

この回答への補足

返答が遅くなりまして申し訳ありません。

頂いた内容をもとに作成したところ、ようやく動くようになりました!!

ありがとうございました!

補足日時:2010/11/25 16:18
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!