我有一个win表单,它有一个datagridview和button。当我按下该按钮时,它会从viewOrderHistory()
课程调用Order
方法。从那里我想向datagridview添加行。我的表单名称orderHistory。这是我的viewOrderHistory
方法。
OrderHistory OH = new OrderHistory();
public void viewOrderHistory(int id){
DataGridView orderHistoryProductDataGrid = OH.dataGridView2;
try
{
int count = 0;
orderHistoryProductDataGrid.Rows.Clear();
orderHistoryProductDataGrid.Refresh();
DatabaseConnection();//Database connection
string ord = "SELECT * FROM Orders_Products WHERE ID='" + id + "'";
SqlCommand ordPro = new SqlCommand(ord, myCon);
SqlDataReader rdr = ordPro.ExecuteReader();
while (rdr.Read())
{
DataGridViewRow row = (DataGridViewRow)orderHistoryProductDataGrid.Rows[count].Clone();
row.Cells[0].Value = rdr["Code"].ToString();
row.Cells[1].Value = mainform.getProduct(rdr["Code"].ToString());
row.Cells[2].Value = rdr["Quantity"].ToString(); ;
orderHistoryProductDataGrid.Rows.Add(row);
count++;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}`
数据成功从数据库中检索。但是行没有添加到我的datagridview中。请帮忙......
答案 0 :(得分:1)
OrderHistory OH = new OrderHistory();
public void viewOrderHistory(int id)
{
DataGridView orderHistoryProductDataGrid = OH.dataGridView2;
try
{
DatabaseConnection();//Database connection
string ord = "SELECT * FROM Orders_Products WHERE ID=@ID";
SqlCommand ordPro = new SqlCommand(ord, myCon);
ordPro.Parameters.AddWithValue("@ID", id);
DataSet resultDst = new DataSet();
using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
{
adapter.Fill(resultDst, "OrderProducts");
}
orderHistoryProductDataGrid.DataSource = resultDst.Tables[0];
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}`
首先,你不应该用这个ID='" + id + "'"
来编写查询,你可以使用sql注入,你可以在维基百科中阅读。这也影响了sql server的性能。始终在查询中使用命令参数。
其次,您可以使用SqlDataAdapter
从DataSet
中的数据库中获取数据,之后将其作为DataSource
添加到网格!您可以阅读SqlDataAdapter
。
第三,请注意您的格式非常纯粹,因此可能没人会回答您!尝试将来做得更好。另外,请勿使用“_”在数据库中编写表格。相反,Orders_Products
只需撰写OrderProducts
更好的做法是将您的数据库连接到不同的层。我在其他问题上写了一个数据访问层:checking user name or user email already exists!在这个问题中,如果你想检查一下,我会详细解释你如何做到这一点。 这将提高您的知识。