2016-05-11 9 views
0

Meine Anwendung liest eine SQL-Abfragetabelle aus und vergleicht und zeigt Werte in bestimmten Feldern in einer Listenansicht an. Meine Abfrage SQL-Tabelle sieht so ausProblem beim Durchlaufen der SQL-Tabelle C#

 
+--------------+---------+-------+----------+--------+ 
| process name | subtask | total | employee | date | 
+--------------+---------+-------+----------+--------+ 
| process 1 | sub1 |  1 |  1111 | 01-May | 
| process 2 |   |  1 |  2222 | 05-May | 
| process 3 |   |  1 |  3333 | 10-May | 
| process 4 |   |  1 |  4444 | 07-May | 
+--------------+---------+-------+----------+--------+ 

Ich habe ein Problem festgestellt. Ich habe bemerkt, indem ich durch meine Schleifen (mit messegebox) gegangen bin, dass Prozess 1 mehrmals in meiner Messagebox angezeigt wird (in MessageBox.Show(dr[0].ToString());), wenn er nur einmal angezeigt werden soll und wenn die Schleife zu Prozess 4 kommt, zeigt Prozess 4 (in (in MessageBox.Show(dr[0].ToString());)), dann stoppt die Schleife und erfasst nicht die Gesamt-, Mitarbeiter- und Datumswerte. Wie kann ich das beheben?

  DateTime now = DateTime.Now; 
     var startDate = new DateTime(now.Year, now.Month, 1); 
     var endDate = startDate.AddMonths(1).AddDays(-1); 


     string[,] report = new string[,] { {"process 1", "sub1", "3", "0", "", "" }, 
     {"process 2", "", "3", "0", "", "" }, 
     {"process 3", "", "3", "0", "", "" } 
     *** there are multiple entries in this array ***** 
     } 

    string totalsquery = "select Process_Name, Sub_Process1_Name, count(id) as total, Completed_By_Employee_Number, max(Refresh_Date) from testDB.dbo.Quality_Data_Master where Refresh_Date between '" + startDate + "' and '" + endDate + "' group by Process_Name, Sub_Process1_Name, Completed_By_Employee_Number, Refresh_Date"; 


    SqlConnection con = new SqlConnection(); 
     SqlDataAdapter ada = new SqlDataAdapter(totalsquery, con); 
     DataTable dt = new DataTable(); 
     ada.Fill(dt); 

     listView1.View = View.Details; 
     listView1.Columns.Add("Process Name", 250); 
     listView1.Columns.Add(" Sub Task", 200); 
     listView1.Columns.Add("Target", 45, HorizontalAlignment.Center); 
     listView1.Columns.Add("Total", 40, HorizontalAlignment.Center); 
     listView1.Columns.Add("Employee", 100, HorizontalAlignment.Center); 
     listView1.Columns.Add("Date", 100); 


     for (int i = 0; i < dt.Rows.Count; i++) 
     { 


      DataRow dr = dt.Rows[i]; 

      //MessageBox.Show(dr.ToString()); 
      for (int j = 0; j < report.GetLength(0); j++) 
      { 

       if (report[j, 0].Equals(dr[0].ToString())) 
       { 
        MessageBox.Show(dr[0].ToString()); 
        if (report[j, 1].Equals(dr[1].ToString())) 
        { 
         MessageBox.Show(dr[1].ToString()); 

         report[j, 3] = (Int32.Parse(report[j, 3]) + (int)dr[2]).ToString(); 

         MessageBox.Show(dr[2].ToString()); 

         report[j, 4] = report[j, 4] + dr[3].ToString(); 
         MessageBox.Show(dr[3].ToString()); 

         report[j, 5] = report[j, 5] + dr[4].ToString(); 



         MessageBox.Show(dr[4].ToString()); 
        } 
       } 
      } 
     } 





     String[] temp = new String[7]; 
     for (int i = 0; i < report.GetLength(0); i++) 
     { 
      temp[0] = report[i, 0].ToString(); 
      temp[1] = report[i, 1].ToString(); 
      temp[2] = report[i, 2].ToString(); 
      temp[3] = report[i, 3].ToString(); 
      temp[4] = report[i, 4].ToString(); 
      temp[5] = report[i, 5].ToString(); 
      //temp[6] = report[i, 6].ToString(); 

      ListViewItem listItem = new ListViewItem(temp); 
      listView1.Items.Add(listItem); 

     } 

      con.Close(); 

+0

Ihre ganze Schleife arbeitet mit der Variablen „report“, die nicht überall definiert ist, noch wird Ihre Abfrage überall gezeigt. Es scheint also, dass hier die Suche beginnt. Hast du den Inhalt von "report" überprüft? – Fuzzzzel

+0

der Bericht ist ein Array Ich werde das hinzufügen, um den Code, den ich zeige danke – bleeetiso

+0

Ich weiß nicht, ob Sie die komplette 'report' Variable eingefügt, das ist, was ich sehe:' string [,] report = new string [,] {{"process 1", "sub1", "3", "0", "", ""}, 'Ich kann nur annehmen, dass du das letzte'} 'vergessen hast. In diesem Fall hast du ein zweidimensionales Array, aber während eine Dimension 1 Element (ein Array mit 6 Elementen) hat, ist das andere leer. Ich denke, um zu beheben, dass Sie 'report.GetLength (0)' ändern müssen, um 'report.GetLength (1)' –

Antwort

0

Ich empfehle Ihren Code Refactoring, auch.

Anstatt ListView zu verwenden, sehen Sie sich DataGridView an.

Mit Datagridview können Sie einfach do:

// dataGridView defined at design 
// more info on [msdn][1] pages 
DataTable dt = GetDataTable(...); 
dataGridView.DataSource = dt; 
Verwandte Themen