When l enter the invoice number 1992 in textbox1 which is linked to 3 rows in the database, only the last row out of 3 is displayed. I want to populate all rows linked to a particular invoice number from the database as shown in the picture using SQL datareader. Below is the code l have tried, and it shows only one row instead of three.

private void button1_Click(object sender, EventArgs e)
{
cmd = new SqlCommand("SELECT ProduceID, Produce, Category, UnitPrice, UnitsOnOrder, Weight, Discount, Total FROM ordertable WHERE InvoiceNumber = '" + textBox1.Text + "'", con);
con.Open();
cmd.ExecuteNonQuery();
SqlDataReader DR;
DR = cmd.ExecuteReader();
while (DR.Read())
{
string ProduceID = (string)DR["ProduceID"].ToString();
dataGridView1.Rows[0].Cells["ProduceID"].Value = ProduceID;
string Produce = (string)DR["Produce"].ToString();
dataGridView1.Rows[0].Cells["Produce"].Value = Produce;
string Category = (string)DR["Category"].ToString();
dataGridView1.Rows[0].Cells["Category"].Value = Category;
string UnitPrice = (string)DR["UnitPrice"].ToString();
dataGridView1.Rows[0].Cells["UnitPrice"].Value = UnitPrice;
string UnitsOnOrder = (string)DR["UnitsOnOrder"].ToString();
dataGridView1.Rows[0].Cells["UnitsOnOrder"].Value = UnitsOnOrder;
string Weight = (string)DR["Weight"].ToString();
dataGridView1.Rows[0].Cells["Weight"].Value = Weight;
string Discount = (string)DR["Discount"].ToString();
dataGridView1.Rows[0].Cells["Discount"].Value = Discount;
string Total = (string)DR["Total"].ToString();
dataGridView1.Rows[0].Cells["Total"].Value = Total;
}
con.Close();
dataGridView1.Rows[0].Cells.....? hint what doesRows[0]do?dataGridView1instance which might be easier and have less code. You can usually do this in the designer but it depends on your IDE and your framework (win forms, wpf, asp.net, etc).