2012-12-06 3 views
5

Ich verwende ein Dataset, um Daten auf Crystal-Bericht ohne Verwendung eines SQL-Servers anzuzeigen.Einfügen von Daten in Datensatz mithilfe von Datentabelle in C# .net

Mein Problem ist, dass Daten nicht in die Tabelle eingefügt werden.

Hier ist mein Code:

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); 
} 
+0

Sind Sie irgendwelche Fehler zu bekommen? Wenn ja, können Sie umfassen – Ren

+0

nein, wenn ich die Datensatzdaten in XML-Datei schreibe, dann bekomme ich nichts bro – Deeapk

Antwort

0

Allgemeinen Spalten in the solution here Blick hinzuzufügen und Daten hinzuzufügen:

DataRow anyRow = ds1.report1.NewRow(); 

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

report1.Rows.Add(anyRow); 

EDIT: (als Antwort auf Ihren Kommentar)

in Mit Ihrem Code fügen Sie keine neue Zeile hinzu, Sie definieren eine, aber fügen Sie sie nie hinzu, dh

report1.Rows.Add(anyRow); 

Blick in Ihrer for-Schleife heißt

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

aber man kann nie diese neue Zeile zur Tabelle hinzuzufügen. Aus diesem Grund habe ich Ihnen ein Beispiel gegeben, wie Sie eine Zeile "hinzufügen" können.

+0

nein, wenn ich die Datensatzdaten in XML-Datei schreibe, dann bekomme ich nichts bro – Deeapk

+0

Sind die richtigen Daten in der Datenmenge vor der Ausgabe in XML vorhanden ? –

0

Sie fügen t1 (DataTable) nicht in dataset.

Fügen Sie diese eine Zeile

ds1.Tables.Add(t1); 

vor

CrystalReport2 objRpt1 = new CrystalReport2(); 
+0

Sicher seine vierte Zeile DataTable t1 = ds1.Tables.Add ("report1"), erreicht dies? –

0

Das Problem ist, dass vor diesem Punkt Sie Zeilen der Datentabelle und der Datentabelle auf den Datensatz hinzufügen müssen.

Sie erstellen ein Dataset, eine Datentabelle, Datenzeilen und setzen Werte in diese Zeilen. Was Sie vergessen haben ist, dass die Datentabelle nicht weiß, dass Sie Daten zu einer Zeile hinzugefügt haben, genau wie die Dataset, die nicht wissen, dass Sie mit einer Datentabelle gearbeitet haben. Damit die obere Ebene tatsächlich die Daten enthält, müssen Sie sie auch dort hinzufügen.

Verwenden Sie diesen Code, nachdem Sie die Werte in der Zeile eingegeben haben.

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

Verwenden Sie diesen Code, nachdem Sie die Datentabelle abzuschließen (da Sie nur eine, die kurz vor dem Crystal Report erstellen sein.

// Add table to the upper level data set. 
ds2.Tables.Add(t1); 
// Now the data set contains a single data table. 
Verwandte Themen