2012-12-06 21 views
5

Używam zestawu danych do wyświetlania danych na raporcie kryształów bez użycia serwera SQL.wstawianie danych do zestawu danych przy użyciu tabeli danych w języku C# .net

Mój problem polega na tym, że dane nie są wstawiane do tabeli.

Oto mój kod:

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

Czy otrzymujesz jakieś błędy? Jeśli tak, można dołączyć je. – Ren

+0

nie, kiedy zapisuję dane zestawu danych do pliku xml, wtedy nic nie dostaję bro – Deeapk

Odpowiedz

0

Ogólnie dodać kolumny spojrzeć na the solution here i dodać dane:

DataRow anyRow = ds1.report1.NewRow(); 

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

report1.Rows.Add(anyRow); 

EDIT: (W odpowiedzi na Twój komentarz)

w Twój kod nie dodaje nowego wiersza, definiujesz go, ale nigdy go nie dodajesz, tj.

report1.Rows.Add(anyRow); 

wygląd wewnątrz pętli for tj

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

ale nigdy dodać nowy wiersz do tabeli. Właśnie dlatego dałem ci przykład, jak dodawać wiersz.

+0

nie, gdy piszę dane zestawu danych do pliku xml, wtedy nic nie dostaję bro – Deeapk

+0

Czy w zestawie danych są prawidłowe dane przed wyjściem do xml ? –

0

Nie dodajesz t1 (DataTable) do dataset.

Dodaj tę jedną linię

ds1.Tables.Add(t1); 

przed

CrystalReport2 objRpt1 = new CrystalReport2(); 
+0

Z pewnością jego czwarta linia DataTable t1 = ds1.Tables.Add ("report1"), osiąga to? –

0

Problem polega na tym, że przed tym miejscu trzeba dodać wiersze do tabeli danych i tabeli danych do zbioru danych.

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

Tworzysz zestaw danych, datatow i datariów oraz umieszczasz wartości w tych wierszach. To, o czym zapomniałeś, to to, że datatable nie wie, że dodałeś dane do wiersza, tak samo jak zbiór danych, o którym wiesz, że zrobiłeś coś z datatable. Aby górny poziom rzeczywiście zawierał dane, musisz je tam również dodać.

Użyj tego kodu po wprowadzeniu wartości w wierszu.

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

użyć tego kodu po wykonaniu DataTable (skoro masz tylko jeden, który może być po prostu przed utworzeniem raportu krystaliczną.

// Add table to the upper level data set. 
ds2.Tables.Add(t1); 
// Now the data set contains a single data table. 
Powiązane problemy