将select语句中的行添加到DataGridView

时间:2016-01-04 15:03:39

标签: c# datagridview

我正在尝试向DataGridView添加行,其中行数据来自 select 语句。到目前为止,这是我的代码:

ArrayList stock_idArray =  GetStockID_line_item(purchase_id);
foreach (int stock_id in stock_idArray)
{
    cmd = new SqlCommand("SELECT * FROM StockDetails.stock_item WHERE stock_id=@stock_id", con);
    cmd.Parameters.Clear();
    cmd.Parameters.AddWithValue("@stock_id", stock_id);
    cmd.CommandType = CommandType.Text;
    SqlDataAdapter dataadapter = new SqlDataAdapter(cmd);
    DataSet ds = new DataSet();
    con.Open();
    dataadapter.Fill(ds, "ItemDetails");
    con.Close();
    //dataGridView1.Rows.Add(ds);
    dataGridView1.DataSource = ds;
    dataGridView1.DataMember = "ItemDetails";
}

然而它不起作用,因为它只显示1行而不是所有行。我想检索多个stock_id的行,然后将它们放在一个DataGridView

3 个答案:

答案 0 :(得分:1)

您的数据位于名为ItemDetails的表格中。所以你应该绑定到DataTable而不是DataSet

dataGridView1.DataSource = ds.Tables[0];

或者:

dataGridView1.DataSource = ds.Tables["ItemDetails"];

答案 1 :(得分:0)

我建议您使用

在foreach循环中使用语句中的代码将数据添加到网格中
dataGridVew.Rows.Add();

这样你可以控制你想要显示的内容和whatnot.im强烈反对绑定因为.u还可以将你的数据类型的对象添加到同一行的隐藏列中以供将来引用,如果你依赖于oo编程。

答案 2 :(得分:0)

为每个DataSet ds创建一个新的stock_id,并在每次迭代时将网格绑定到ds。完成所有操作后,网格将绑定到最后一个数据集。

尝试在循环前初始化ds,并在循环后设置DataSource

ArrayList stock_idArray =  GetStockID_line_item(purchase_id);
DataSet ds = new DataSet(); 
foreach (int stock_id in stock_idArray)
{
    cmd = new SqlCommand("SELECT * FROM StockDetails.stock_item WHERE stock_id=@stock_id", con);
    cmd.Parameters.Clear();
    cmd.Parameters.AddWithValue("@stock_id", stock_id);
    cmd.CommandType = CommandType.Text;
    SqlDataAdapter dataadapter = new SqlDataAdapter(cmd);

    con.Open();
    dataadapter.Fill(ds, "ItemDetails");
    con.Close();
} 
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "ItemDetails";
相关问题