2013-01-15 170 views
0

我有一個C#中的datagridview問題。我通過查詢從MySQL數據庫中獲取數據。但出於某種原因,只有結果的第一行顯示在gridview中。我使用下面的代碼來做這個東西:C#:DataGridView只顯示一行

MySqlCommand command = new MySqlCommand(query, Globals.Connection); 
     reader = command.ExecuteReader(); 
     while (reader.Read()) 
     { 
      object[] dataset = new object[7]; 
      dataset[0] = reader["sto_name"]; 
      dataset[1] = reader["esss"]; 
      dataset[2] = reader["onl_name"]; 
      dataset[3] = reader["rpc_id"]; 
      if (reader["datum_aufstellung"].ToString() != "0") 
      { 
       dataset[4] = getDate(reader["datum_aufstellung"]); 
      } 
      else 
      { 
       dataset[4] = "Kein Datum gesetzt"; 
      } 
      if (reader["datum_abbau"].ToString() != "0") 
      { 
       dataset[5] = getDate(reader["datum_abbau"]); 
      } 
      else 
      { 
       dataset[5] = "Kein Datum gesetzt"; 
      } 
      dataset[6] = reader["id"]; 
      dataGridView1.Rows.Add(dataset); 
     } 

它的工作,早些時候的幾行代碼。 ^^ 你有什麼想法,問題是什麼?

UPDATE: while循環的內容只執行一次。在我問這個問題之前,我也在想這個事實。但是,如果我在MySQL客戶端中執行查詢,它將返回比一個更多的行。

更新2: 我注意到,雖然while循環的全部內容被註釋掉,環路正是因爲有在查詢結果行執行相同的時間。有任何想法嗎?

更新3: 似乎一切後

dataGridView1.Rows.Add(dataset); 

不執行。不僅在循環中,而且在整個功能中。 但是爲什麼?

問題已解決: 這裏發佈的代碼沒有任何問題。我在代碼的其餘部分有一個事件,當輸入了dgv中的一行時,它執行了一些事情。發生這種情況時,我想這個循環會被打破。刪除該事件後,dgv被正確填充。

+0

什麼dataGridView1.Rows的while循環後,計數執行完畢? – Daniel

+0

我知道這聽起來很明顯,但你從你的命令中讀了多少行?你嘗試在你的內部放置一個斷點,while()循環來檢查它是不止一個? – openshac

回答

1

您應該使用DataAdapter並使用它來填充DataTable。爲抓住這樣的數據來創建一個方法: -

public DataTable GetDataTable() 
     { 
      DataTable dt = new DataTable(); 

      using (SqlConnection con = new SqlConnection (@"YourCOnnectionString")) 
      { 
       using (SqlCommand cmd = new SqlCommand (query, con)) 
       { 
        var adaptor = new SqlDataAdapter(); 
        adaptor.SelectCommand = cmd; 

        con.Open(); 
        adaptor.Fill(dt); 

        return dt; 

       } 
      } 
     } 

那麼你可以與你的DataGrid中引用它: -

DataTable Result = GetDataTable(); 

DatagridView1.DataSource = Result; 
+0

我想堅持MySql-Classes。 –

+0

然後你需要做的就是用我的前綴來改變這些命令。 – Derek

+0

好的。現在我得到一個空的datagridview,儘管數據表有正確的內容。 –

0

還有另一種簡單的方法。 您可以使用DataTable來代替數據集,並將dataGridView的DataSource設置爲該DataTable。 這將解決您的問題,並使用該功能,您可以輕鬆設置列標題。

+0

但我的方式也應該能夠工作。我想堅持我的方式。 –

1

檢查網格上的RowCount屬性。如果增加到所需的行數,它可以設置爲1。

+0

我不能,因爲「更新3」。 dataGridView1.Rows.Add(dataset)後的所有內容;將不會執行。 –