将每行保存在手动构建的gridview中 [英] Save each row in gridview that was built manually

查看:167
本文介绍了将每行保存在手动构建的gridview中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图从GridView保存多行到SQL数据库。 GridView是手动内置的代码,因此它不是数据绑定...原因是因为这是一个部分的网格,必须添加到一个报价... Okey,所以我做了保存部分,唯一的东西是,是我必须设置一个foreach从该行(我完成)的数据,但变量将不断设置,只获取最后一行的数据...任何人都可以请帮我吗?这是我所做的:

$ $ p $ conn = new SqlConnection(GetConnectionString());

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

尝试
{
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 {
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(GridView1.Rows中的GridViewRow行)
// {
// if(rows.RowType == DataControlRowType.DataRow)
// {
// string myPart = rows.Cells [0] .Text;
// string myQuantity = rows.Cells [1] .Text;
// string myPrice = rows.Cells [2] .Text;
//

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

有什么想法吗?
在此先感谢!

解决方案

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

  conn.Open(); 

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

foreach(GridView1.Rows中的GridViewRow行)
{
string myPart = row.Cells [0] .Text;
string myQuantity = row.Cells [1] .Text;
string myPrice = row.Cells [2] .Text;
// ...等

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属性。什么不采取。单元格的值(如果他们的CellValueType被正确定义)?

I'm trying to save multiple rows from a gridview into sql database. The gridview is manually built in code, thus it is not databind... The reason for this is because this is a grid for parts that has to be added to a quote... Okey so I done the saving part, the only thing is, is that I have to set a foreach to get the data from that row (which I done), but the variables will be set constantly and only getting the last rows data... Can anybody please help me out? This is what I've done:

    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();

This will save the data, but I need to do something so that each row will be saved...This is the foreach that I wrote:

     //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; 
        //    }

But the problem is, it is not going to get all the rows in the grid's data, it will basically only save the last row then....

Any ideas please? Thanks in advance!

解决方案

I refactored your code a little bit: the SqlCommand has to be executed for each rows, and the parameters have to be retrieve from the GridView before.

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();

I am not sure you want to store Price, Quantity and numeric values as text. You probably want to do some validation first, and do some conversions instead of picking the Text property. What not take the .Value of the cell (if their CellValueType is defined correctly) ?

这篇关于将每行保存在手动构建的gridview中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆