QA@IT

ASP.NETで、レポートで出力する際に違うデータセットを読み込みたい

4854 PV

表題の通りなのですが、
データ出力する際に
デザイン時に用意したデータセットではなく、
よそから持ってきたデータ(SQLDataReader)を結合して、レポートを出そうと思っているのですが
データを接続し直しても(し直したつもり)、新規のデータを取得できず、元のデータセットデザイナのデータを取得してしまいます

直接PDFを出力するとうまくいくようなのですが・・・

レポートビューワに後からデータをバインドし直すにはどのタイミングで、バインドすればいいのでしょうか
それと、データリーダーでデータを取得するのはまずいでしょうか

protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack != true) {
    xxxxTableAdapter dsP = new xxxxTableAdapter();

    //データバインド
    dsP.Connection.Open();
    dsPDF dpSet = new dsPDF();
        //データがデータリーダで取得される
    SqlDataReader sdr = dsP.Getxxxx_PDF("2013/10/1 0", "2013/10/31 23");
    dpSet.Load(sdr, LoadOption.OverwriteChanges, dpSet.xxxxTable);
    sdr.Close();
    dsP.Connection.Close();
        //とってきたデータテーブルを、デザイナのデータセットに再接続する
    ReportDataSource rs = new ReportDataSource();
    rs.Name = "dsXXXX";
    rs.Value = dpSet.xxxxTable;
        //予定ではここで、再読込しているはず・・・失敗
    repXXXX.LocalReport.ReportPath = Server.MapPath(@"PDF_xxxx.rdlc");
    repXXXX.LocalReport.DataSources.Add(rs);
    repXXXX.LocalReport.Refresh();  

    //ここから下のコメントを有効にすると、想定していたPDFを直接はき出すが、
        //レポートビュワーが表示されなくなる
    //byte[] bTmp = repXXXX.LocalReport.Render("PDF");
    //Response.ContentType = "application/pdf";

    //// バイナリデータ出力
    //Response.BinaryWrite(bTmp);
    //// 余計なものを出力させない
    //Response.End();
}
}

回答

すいません。質問直後ですが解決してしまいました
ReportDataSource rs = new ReportDataSource();
rs.Name = "dsxxxx";
rs.Value = dpSet.D0xxxxTable;
repxxxx.LocalReport.DataSources.Clear();
repxxxx.LocalReport.Refresh();
repxxxx.LocalReport.DataSources.Add(rs);
repxxxx.LocalReport.ReportPath = Server.MapPath(@"PDF_xxxx.rdlc");
としたらうまくいきました

Clearしてからデータソースを読めば良かったみたいです
お騒がせしました

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。