2013-04-08 60 views
1

我搜索堆棧溢出這種問題。但是我發現了幾個關於這個問題的類似問題,但顯示了不同的解決方案清除重複在Datagridview

我想在datagridview中顯示數據而不重複。我不知道它是如何重複的。

conn.Open(); 
      query = "SELECT Books.BookID,Books.Title,Books.AuthorID,Authors.AuthorName,Books.ISBN from Books,Authors"; 
      cmd = new SqlCommand(query, conn); 
      dr = cmd.ExecuteReader(); 

      while (dr.Read())    
      { 
       dataGridView1.Rows.Clear(); 
       dataGridView1.Rows.Add(dr[0].ToString(), dr[1].ToString(), dr[2].ToString(), dr[3].ToString(), dr[4].ToString()); 
      } 
      cmd.Dispose(); 
      conn.Close(); 

我希望發生什麼:

的BookID | BookTitle |

100001 |社會學|等等。
100002 |歷史|等等。

這是顯示每次

的BookID數據網格| BookTitle |

100001 |社會學|等等。
100002 |歷史|等等。
100001 |社會學|等等。
100002 |歷史|等等。

回答

2

更改您的查詢來從數據庫DISTINCT記錄,然後將它們綁定到datagridview

query = "SELECT DISTINCT Books.BookID,Books.Title,Books.AuthorID,Authors.AuthorName, 
      Books.ISBN from Books,Authors"; 

注: 該查詢將行不同,如果有任何列有不同的價值。所以這取決於你希望顯示哪一列的值,並希望在網格上顯示。

一件事,如果可能的話用JOIN而不是笛卡爾乘積這樣

query = "SELECT DISTINCT Books.BookID,Books.Title,Books.AuthorID,Authors.AuthorName, 
     Books.ISBN from Books 
     LEFT OUTER JOIN Authors on Books.AuthorId=Author.AuthorId"; 

編輯:嘗試此結合

using(SqlReader reader = cmd.ExecuteReader()) 
    { 
     if (reader.HasRows) 
     { 
      DataTable dt = new DataTable(); 
      dt.Load(reader); 
      dataGridView1.DataSource = dt; 
     } 
    } 
+0

它仍然顯示重複。其實,我的數據庫沒有重複的值。我不知道什麼時候從數據庫獲取它們到DataGridView,它會變得重複。 – eaponz 2013-04-08 15:03:44

+0

@AkoSiAsiong將'SqlReader'改爲'SqlDataReader' – DeMama 2013-04-08 15:32:21

2

試試這個

conn.Open(); 
query = "SELECT Books.BookID,Books.Title,Books.AuthorID,Authors.AuthorName,Books.ISBN from Books,Authors"; 
cmd = new SqlCommand(query, conn); 

SqlDataAdapter da = new SqlDataAdapter(cmd); 

dataGridView1.Clear(); 

da.Fill(dataGridView1); 

cmd.Dispose(); 
conn.Close(); 

如果沒有把握這是完全正確的,但它可能有幫助。

1

你需要改變你的查詢中使用DISTINCT,因爲這將消除重複:

SELECT DISTINCT Books.BookID,Books.Title,Books.AuthorID,Authors.AuthorName,Books.ISBN from Books,Authors