我搜索了Stack Overflow这个问题。但我发现了几个类似的问题,但显示出不同的解决方案。
我想在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 |历史|等。
答案 0 :(得分: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;
}
}
答案 1 :(得分: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();
不确定这是否完全正确,但可能有所帮助。
答案 2 :(得分:1)
您需要更改查询才能使用DISTINCT,因为这会删除重复项:
SELECT DISTINCT Books.BookID,Books.Title,Books.AuthorID,Authors.AuthorName,Books.ISBN from Books,Authors