1

このコードは、最初の行のみで機能し、. このコードを残りの行で機能させたい:

private void Save_Click(object sender, EventArgs e)
{
    textBox1.Text =orderdetailsDataGridView.Rows.Count.ToString();
    try
    {
        using (SqlCommand cmd = new SqlCommand())
        {
            con.Open();
            cmd.Connection = con;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "OD1";
        foreach (DataGridViewRow row in orderdetailsDataGridView.Rows)
        {
            if (!row.IsNewRow)
            {
                for (int x = 0; x < orderdetailsDataGridView.Rows.Count; x++)
                {
                    cmd.Parameters.Add("@order_id", SqlDbType.Int).Value = row.Cells[0].Value;
                    cmd.Parameters.Add("@prod_id", SqlDbType.Int).Value = row.Cells[1].Value;
                    cmd.Parameters.Add("@qun", SqlDbType.Int).Value = row.Cells[2].Value;
                    cmd.Parameters.Add("@price", SqlDbType.Decimal).Value = row.Cells[3].Value;
                    cmd.ExecuteNonQuery();
                    x++;


                }
            }
        }

    }
}
catch (Exception er)
{
    MessageBox.Show(er.ToString());
}
4

2 に答える 2

0

することをお勧めしますmodify nested structure

            foreach (DataGridViewRow row in orderdetailsDataGridView.Rows)
            {
                if (!row.IsNewRow)
                {
                    for (int x = 0; x < orderdetailsDataGridView.Rows.Count; x++)
                    {
                        using (SqlCommand cmd = new SqlCommand())
                        {
                           con.Open();
                           cmd.Connection = con;
                           cmd.CommandType = CommandType.StoredProcedure;
                           cmd.CommandText = "OD1";
                           cmd.Parameters.Add("@order_id", SqlDbType.Int).Value = row.Cells[0].Value;
                           cmd.Parameters.Add("@prod_id", SqlDbType.Int).Value = row.Cells[1].Value;
                           cmd.Parameters.Add("@qun", SqlDbType.Int).Value = row.Cells[2].Value;
                           cmd.Parameters.Add("@price", SqlDbType.Decimal).Value = row.Cells[3].Value;
                           cmd.ExecuteNonQuery();
                        }
                        x++;
                    }
                }
            }
于 2012-11-05T10:38:45.553 に答える
0

あなたが適切なコードを書いたとは思いません。foreach ループでは、GridView から 1 つずつ行をフェッチしてから、gridview の数で内側のループを再度実行します。この内側のループでは、このループが中断されるまで、同じ「行」を使用しています。 foreach ループで抽出しました。これが間違っているかどうかはわかりませんが、理想的にはこれは問題ありません。

于 2012-11-05T10:46:07.760 に答える