簡體   English   中英

從datagridview數據插入數據庫,該數據從C#MSSQL中的另一個表檢索

[英]Insert to database from datagridview data which is retrieved from another table in C# MSSQL

我有兩個表“項目”和“發票”。 我的表單中帶有標題的“ datagridview”現在,當用戶輸入“ item desc”單元格值時(“為項目desc單元格使用自動完成屬性,按下事件以根據用戶輸入進行填充”)。 現在,用戶將輸入“數量”和“項目總計”(暫時手動輸入)。 然后按提交按鈕。 問題來了。 它向我顯示錯誤輸入字符串不正確。 但是,當我手動輸入所有單元格時(我的意思是不使用keydown事件填充數據),數據將插入到發票表中。

這是我的提交按鈕,可插入發票表<

private void btn_submit_Click(object sender, EventArgs e)
        {
            try
            {
                foreach (DataGridViewRow row in dtgrdvw_items.Rows)
                {
                    using (SqlCommand cmd = new SqlCommand("insert into invoice values (@inv_no,@inv_date,@inv_cust_name,@inv_remarks,@inv_type,@inv_item_code,@inv_item_desc,@inv_item_rate," +
                        "@inv_item_qty,@inv_item_total)", con))
                    {
                        cmd.Parameters.AddWithValue("@inv_no", Convert.ToInt32(txt_inv_no.Text));
                        cmd.Parameters.AddWithValue("@inv_date", txt_date.Text);
                        cmd.Parameters.AddWithValue("@inv_cust_name", txt_cust_name.Text);
                        cmd.Parameters.AddWithValue("@inv_remarks", txt_remarks.Text);
                        cmd.Parameters.AddWithValue("@inv_type", cmbx_inv_type.SelectedItem);
                        cmd.Parameters.AddWithValue("@inv_item_code",Convert.ToInt32(row.Cells[0].Value));
                        cmd.Parameters.AddWithValue("@inv_item_desc",Convert.ToString(row.Cells[1].Value));
                        cmd.Parameters.AddWithValue("@inv_item_rate",Convert.ToDecimal(row.Cells[2].Value));
                        cmd.Parameters.AddWithValue("@inv_item_qty",Convert.ToInt32(row.Cells[3].Value));
                        decimal total = Convert.ToDecimal(row.Cells[2].Value) * Convert.ToDecimal(row.Cells[3].Value);
                        cmd.Parameters.AddWithValue("@inv_item_total",total);
                        if (con.State == ConnectionState.Closed)
                        {
                            con.Open();
                        }
                        cmd.ExecuteNonQuery();
                        con.Close();

                    }

                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            MessageBox.Show("invoice submitted");
        }

>

這是我的按鍵事件

<

 private void dtgrdvw_items_KeyDown(object sender, KeyEventArgs e)
          {
            if (e.KeyCode == Keys.Tab)
            {

                int rowindex = dtgrdvw_items.CurrentCell.RowIndex;
                int columnindex = dtgrdvw_items.CurrentCell.ColumnIndex;
                if (columnindex == 1)
                {
                    SqlCommand cmd = new SqlCommand("Select * from item WHERE item_desc=@inv_item_desc", con);
                    cmd.Parameters.Add("@inv_item_desc", SqlDbType.VarChar).Value = dtgrdvw_items.Rows[rowindex].Cells[columnindex].Value.ToString();
                    if (con.State == ConnectionState.Closed)
                    {
                        con.Open();
                    }
                    SqlDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                      dtgrdvw_items.Rows[rowindex].Cells[0].Value = dr[0].ToString();
                       dtgrdvw_items.Rows[rowindex].Cells[1].Value = dr[1].ToString();
                       dtgrdvw_items.Rows[rowindex].Cells[3].Value = dr[2].ToString();
                    }
                      dr.Close();
                }
           }
       } 

>

這是我的gridview

請幫忙。

如果我理解正確,則“費率”列將接受整數類型。 您可能要在上使用Convert.ToInt32

dtgrdvw_items.Rows[rowindex].Cells[3].Value = dr[2].ToString();

這樣,在將字符串分配給Cells [3](即“費率”列)之前,它將字符串轉換為整數。

dtgrdvw_items.Rows[rowindex].Cells[3].Value = Convert.ToInt32(dr[2].ToString());

網格中的像元0代碼1描述2數量3比率4總計

cmd.Parameters.AddWithValue("@inv_item_code",Convert.ToInt32(row.Cells[0].Value));
cmd.Parameters.AddWithValue("@inv_item_desc",Convert.ToString(row.Cells[1].Value));
cmd.Parameters.AddWithValue("@inv_item_rate",Convert.ToDecimal(row.Cells[2].Value)); //Change

應該:

cmd.Parameters.AddWithValue("@inv_item_rate",Convert.ToDecimal(row.Cells[3].Value));

cmd.Parameters.AddWithValue("@inv_item_qty",Convert.ToInt32(row.Cells[3].Value)); //Change

應該:

cmd.Parameters.AddWithValue("@inv_item_qty",Convert.ToInt32(row.Cells[2].Value)); //Change

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM