2

グリッドビューからSQLデータベースに複数の行を保存しようとしています。gridviewは手動でコードに組み込まれているため、データバインドされていません...これは、見積もりに追加する必要のあるパーツのグリッドであるためです...わかりました。保存パーツを作成しました。これは、唯一のことです。つまり、その行からデータを取得するために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; 
        //    }

ただし、問題は、グリッドのデータ内のすべての行を取得するのではなく、基本的に最後の行のみを保存することです。

何かアイデアはありますか?前もって感謝します!

4

1 に答える 1

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が正しく定義されている場合)?

于 2013-03-07T11:07:31.433 に答える