0

プログラムでデータを表示する必要がありますが、私のコードは常に同じデータを表示しています。WHERE em.emp_id=5 または 6 を変更しても同じです

private void Form1_Load(object sender, EventArgs e)
{
    try
    {
        SqlConnection c = frmMain.connect();

        rptEmpProf cryRpt = new rptEmpProf();
        TableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
        TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
        ConnectionInfo crConnectionInfo = new ConnectionInfo();
        Tables CrTables ;
        crConnectionInfo.ServerName = frmMain.dbSrvrName;
        crConnectionInfo.DatabaseName = frmMain.dbName;
        crConnectionInfo.UserID = frmMain.dbUsrName;
        crConnectionInfo.Password = frmMain.dbPass;
        CrTables = cryRpt.Database.Tables ;
        foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
        {
            crtableLogoninfo = CrTable.LogOnInfo;
            crtableLogoninfo.ConnectionInfo = crConnectionInfo;
            CrTable.ApplyLogOnInfo(crtableLogoninfo);
        }

        string q = "SELECT em.emp_id 'Employee ID', " +
            "em.emp_fname 'First Name', " +
            "em.emp_lname 'Last Name', " +
            "em.emp_phone 'Phone', " +
            "em.emp_email 'Email', " +
            "em.emp_addr 'Address', " +
            "em.emp_join_dt 'Join Date', " +
            "em.emp_salary 'Salary'," +
            "em.emp_card_no 'Card No.', " +
            "ds.dsg_name 'Designation', " +
            "dp.dept_name 'Department', " +
            "sf.sft_name 'Shift', " +
            "sc.sec_name 'Section' " +
        "FROM employee em INNER JOIN designations ds ON ds.dsg_id=em.emp_dsg_id " +
            "INNER JOIN sections sc ON sc.sec_id = ds.dsg_sec_id " +
            "INNER JOIN departments dp ON dp.dept_id = sc.sec_dept_id " +
            "INNER JOIN shifts sf ON sf.sft_id = em.emp_sft_id " +
        "WHERE em.emp_id = 6;";

        SqlCommand cmd = new SqlCommand(q, c);
        SqlDataAdapter da = new SqlDataAdapter();
        da.SelectCommand = cmd;
        DataSet ds = new DataSet();
        da.Fill(ds);
        cryRpt.SetDataSource(ds);
        crystalReportViewer1.ReportSource = cryRpt;
        crystalReportViewer1.Refresh();

        frmMain.disconnect(c);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
        this.Close();
    }
}
4

3 に答える 3

0

やっと解決です…

データセットの入力中にテーブルを追加しました。

da.Fill(ds.Tables[0]);

それ以外の

da.Fill(ds);
于 2012-04-09T05:16:51.223 に答える
0

あなたはハードコードされています

 WHERE em.emp_id = 6

動的に渡してください。デバッグ: データ可能なデータを最初に確認します。

于 2012-04-07T09:50:52.597 に答える
0

ライハン、

DataSet を Crystal Report にフィードする場合、最も重要なことは次のとおりです。

  1. レポートを最初に作成したデータソースの種類
  2. 現在フィードしているデータセットが完全に一致していること (同じ列と型)

これが正しく行われていれば、ここで行っているように、接続情報を設定してレポートにログオン情報を適用する必要はありません。(データセットを構築するために必要なものだけです。Crystal Reportsはそのデータが必要なだけなので気にしません。すでにクエリされたデータを提供しているのに、なぜサーバー/データベース/パスワードを気にするのでしょうか?)

XML データソースからレポートを作成し、データを渡す例を次に示します: http://www.crystalreportsbook.com/Forum/forum_posts.asp?TID=9

コピーよりもはるかに単純であることがわかります。実際、同じデータが表示され続ける理由は、テーブルのログオン情報がレポートの作成に使用されたデフォルトのクエリを指定して使用しているサーバーなどに接続しているためだと思います。データセットは無視されています。

Raihan、このコードを削除することから始めます。これを行うとどうなりますか?

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

crConnectionInfo.ServerName = frmMain.dbSrvrName;
crConnectionInfo.DatabaseName = frmMain.dbName;
crConnectionInfo.UserID = frmMain.dbUsrName;
crConnectionInfo.Password = frmMain.dbPass;
CrTables = cryRpt.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
{
crtableLogoninfo = CrTable.LogOnInfo;
crtableLogoninfo.ConnectionInfo = crConnectionInfo;
CrTable.ApplyLogOnInfo(crtableLogoninfo);
}

Raihan さん、私が上に書いたことを実行した後、プロンプトが表示された場合、これはあなたの DataSet が気に入らないことを意味します。レポートにサーバー名などを渡して問題を解決しようとしないでください。代わりに、DataSet を修正してみてください。

データセットの選択ステートメントで列のエイリアスを作成しています。クリスタルレポートってそんなもんですか?Crystal Reports のフィールドに「emp_id」、「emp_fname」、「emp_lname」などの名前が付いている場合は、「Employee ID」、「First Name」、「Last Name」などのエイリアスを絶対に付けないでください。

列コレクションに次のものがあります。

  1. 列が少なすぎます。列が多すぎます。レポートが構築された正確なセットが必要です。(これは、Crystal Report デザイナー内で確認できます。)

  2. 不適切な名前の列。

  3. 異なるタイプの列。たとえば、データベースの列の型を変更したとします。この新しい列の種類を使用するようにレポートが更新されていない場合、データセットは同じ種類の列を渡さないと失敗します。

于 2012-04-07T09:57:23.240 に答える