如何从类中向Datagridview添加行?

时间:2014-10-21 05:59:30

标签: c# datagridview

我有一个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中。请帮忙......

1 个答案:

答案 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的性能。始终在查询中使用命令参数。

其次,您可以使用SqlDataAdapterDataSet中的数据库中获取数据,之后将其作为DataSource添加到网格!您可以阅读SqlDataAdapter

第三,请注意您的格式非常纯粹,因此可能没人会回答您!尝试将来做得更好。另外,请勿使用“_”在数据库中编写表格。相反,Orders_Products只需撰写OrderProducts

更好的做法是将您的数据库连接到不同的层。我在其他问题上写了一个数据访问层:checking user name or user email already exists!在这个问题中,如果你想检查一下,我会详细解释你如何做到这一点。 这将提高您的知识