5

データセットを使用して、SQL サーバーを使用せずに Crystal レポートにデータを表示しています。

私の問題は、データがテーブルに挿入されていないことです。

これが私のコードです:

try
{
    DataSet2 ds1 = new DataSet2();             
    DataTable t1 = ds1.Tables.Add("report1");
    t1.Columns.Add("mtrno", Type.GetType("System.String"));
    t1.Columns.Add("pf1", Type.GetType("System.String"));
    t1.Columns.Add("pf2", Type.GetType("System.String"));
    t1.Columns.Add("pf3", Type.GetType("System.String"));
    t1.Columns.Add("pf4", Type.GetType("System.String"));
    t1.Columns.Add("pf5", Type.GetType("System.String"));
    t1.Columns.Add("pf6", Type.GetType("System.String"));
    t1.Columns.Add("pf7", Type.GetType("System.String"));
    t1.Columns.Add("rel", Type.GetType("System.String"));

    //t3.Columns.Add("r_no",Type.GetType("System.String"));
    //t3.Columns.Add("date", Type.GetType("System.String"));
    //t3.Columns.Add("type", Type.GetType("System.String"));
    //t3.Columns.Add("const", Type.GetType("System.String"));
    //t3.Columns.Add("volt", Type.GetType("System.String"));
    //t3.Columns.Add("class", Type.GetType("System.String"));
    //t2.Columns.Add("rel", Type.GetType("System.String"));

    DataRow r1;
    // DataRow r3;

    textBox1.Clear();
    DirectoryInfo d_info = new DirectoryInfo("D:\\");
    FileInfo[] f_info = d_info.GetFiles("*.txt");
    foreach (FileInfo fi in f_info)
    {
        string fname = @"D:\\" + Path.GetFileNameWithoutExtension(fi.Name) + ".txt";
        if (fname.Contains(listBox1.SelectedItem.ToString()))
        {
            StreamReader sread1 = new StreamReader(fname);
            string line = null;
            while ((line = sread1.ReadLine()) != null)
            {

                if (line.Contains("[Report Header]|" + comboBox3.SelectedItem.ToString()))
                {
                    line = line.Replace("[Report Header]|", "");
                    string[] r_words = line.Split('|');

                    line = sread1.ReadLine();
                    if (line.Contains("[Field Heading]|"))
                    {
                        string[] f_words = line.Split('|');
                        foreach (string s in f_words)
                        {
                            textBox1.Text = textBox1.Text + s;
                        }
                    }
                    textBox1.Text = textBox1.Text + Environment.NewLine;
                    for (int i = 0; i < 32; i++)
                    {
                        line = sread1.ReadLine();
                        if (line.Contains("[Meter_Record]|") || line.Contains(comboBox4.SelectedItem.ToString()))
                        {
                            line=line.Replace("[Meter_Record]|","");                                        
                            string[] m_words = line.Split('|');
                            r1 = t1.NewRow();                                        
                            r1["mtrno"] = m_words[0].ToString();
                            r1["pf1"] = m_words[1].ToString();
                            r1["pf2"] = m_words[2].ToString();
                            r1["pf3"] = m_words[3].ToString();
                            r1["pf4"] = m_words[4].ToString();
                            r1["pf5"] = m_words[5].ToString();
                            r1["pf6"] = m_words[6].ToString();
                            r1["pf7"] = m_words[7].ToString();
                            r1["rel"] = "yes";
                            //for (int j = 0; j < m_words.Length;j++ )
                            //{
                            //    textBox1.Text = textBox1.Text + m_words[j];
                            //}
                        }
                        //textBox1.Text = textBox1.Text + Environment.NewLine;
                    }
                }
            }
        }
    }

    CrystalReport2 objRpt1 = new CrystalReport2();
    //objRpt.SetDataSource(ds.Tables["h_report"]);
    objRpt1.SetDataSource(ds1.Tables["report1"]);  
    crystalReportViewer1.ReportSource = objRpt1;
    crystalReportViewer1.Zoom(1);
    crystalReportViewer1.Refresh(); 
}
catch(Exception ex)
{
    MessageBox.Show(ex.Message);
}
4

3 に答える 3

0

t1(DataTable)をに追加していませんdataset

この1行を追加します

ds1.Tables.Add(t1);

CrystalReport2 objRpt1 = new CrystalReport2();
于 2012-12-06T12:39:11.940 に答える
0

問題は、この時点より前に、行をデータ テーブルに追加し、データ テーブルをデータ セットに追加する必要があることです。

objRpt1.SetDataSource(ds1.Tables["report1"]); 

データセット、データテーブル、データ行を作成し、それらの行に値を入れています。あなたが忘れているのは、データテーブルで何かをしたことを知っているデータセットと同じように、データテーブルが行にデータを追加したことを知らないということです。上位レベルに実際にデータを含めるには、そこにもデータを追加する必要があります。

行に値を入力した後、このコードを使用します。

// Add row to the table.
t1.Rows.Add(r1);
// Now the table contains a single row.

データテーブルを完成させた後、このコードを使用します (Crystal レポートを作成する直前に使用できるコードは 1 つしかないためです。

// Add table to the upper level data set.
ds2.Tables.Add(t1);
// Now the data set contains a single data table.
于 2012-12-06T12:53:56.030 に答える
0

通常、列を追加するには、こちらのソリューションを参照し、データを追加するには:

DataRow anyRow = ds1.report1.NewRow();

anyRow.mtrno  = 123;
anyRow.pf1 = "abc";

report1.Rows.Add(anyRow);

編集:(あなたのコメントに応じて)

あなたのコードでは、新しい行を追加していません.1つ定義しますが、決して追加しないでください.

report1.Rows.Add(anyRow);

forループの中を見てください

r1 = t1.NewRow();
r1["mtrno"] = m_words[0].ToString();

ただし、この新しい行をテーブルに追加することはありません。これが、行を「追加」する方法の例を示した理由です。

于 2012-12-06T12:06:34.840 に答える