保存手动构建的gridview中的每一行

时间:2013-03-07 06:58:39

标签: c# gridview foreach gridviewrow

我正在尝试将多行从gridview保存到sql数据库中。 gridview是手动构建的代码,因此它不是数据绑定...原因是因为这是一个必须添加到引用的部件网格... Okey所以我做了保存部分,唯一的事情是的,是我必须设置一个foreach来获取该行的数据(我已完成),但变量将不断设置,只获取最后一行数据......有人可以帮帮我吗?这就是我所做的:

    conn = new SqlConnection(GetConnectionString());

    string sql = "INSERT INTO CC_ItemsRequested (Item,Quantity, Price, ModelID, DateCreatedOn ) VALUES (@Item, @Quantity, @Price, @ModelID, @DateCreatedOn)";

    try
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand(sql, conn);
        int row = GridView1.Rows.Count;

        cmd.Parameters.AddWithValue("@Item", myPart);
        cmd.Parameters.AddWithValue("@Quantity", myQuantity);
        cmd.Parameters.AddWithValue("@Price", myPrice);
        cmd.Parameters.AddWithValue("@ModelID", methodID);
        cmd.Parameters.AddWithValue("@DateCreatedOn", DateTime.Now);

        for (int i = 0; i < row; i++)
        {
            cmd.Parameters["@Item"].Value = myPart;
            cmd.Parameters["@Quantity"].Value = myQuantity;
            cmd.Parameters["@Price"].Value = myPrice;
            cmd.Parameters["@ModelID"].Value = methodID;
        }

        cmd.CommandType = CommandType.Text;
        cmd.ExecuteNonQuery();

这将保存数据,但我需要做一些事情,以便保存每一行...这是我写的foreach:

     //foreach (GridViewRow rows in GridView1.Rows)
        //{
        //    if (rows.RowType == DataControlRowType.DataRow)
        //    {
        //        string myPart = rows.Cells[0].Text;
        //        string myQuantity = rows.Cells[1].Text;
        //        string myPrice = rows.Cells[2].Text; 
        //    }

但问题是,它不会获得网格数据中的所有行,它基本上只会保存最后一行......

有什么想法吗? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

我重构了你的代码:必须为每一行执行SqlCommand,并且必须先从GridView中检索参数。

conn.Open();

using(SqlCommand cmd = new SqlCommand(sql, conn))
{
    var now = DateTime.Now;

    foreach (GridViewRow row in GridView1.Rows)
    {
        string myPart = row.Cells[0].Text;
        string myQuantity = row.Cells[1].Text;
        string myPrice = row.Cells[2].Text;
        //... etc

        cmd.Parameters.Clear();
        cmd.Parameters.AddWithValue("@Item", myPart);
        cmd.Parameters.AddWithValue("@Quantity", myQuantity);
        cmd.Parameters.AddWithValue("@Price", myPrice);
        cmd.Parameters.AddWithValue("@ModelID, methodID);
        cmd.Parameters.AddWithValue("@DateCreatedOn, now);

        cmd.ExecuteNonQuery();
    }
}

conn.Close();

我不确定您是否要将价格,数量和数值存储为文字。您可能希望先进行一些验证,然后进行一些转换,而不是选择Text属性。什么不接受单元格的.Value(如果他们的CellValueType被正确定义)?