私のプログラムでは、購入注文を挿入、更新、または削除するためのデータグリッドビューがあり、ショッピングカートのように動作します。このデータグリッドビューは、BookName、ISBNNo、注文数量、単価、および合計で構成されます。このデータグリッドビューデータをデータベースに挿入すると、各行ID 値を持つ一意の ID PO_Cart_No(pk) で挿入します。
また、Po_No、supplier_Id、および総計の詳細であるその他の背景テキストボックスの詳細は、PO テーブルと呼ばれる別のテーブルに挿入されます。また、この 2 つのテーブルは外部キー PO_No とリンクしています。私の質問は、既存の行に新しい行を追加してデータベースを更新するときです。その新しい行は挿入されず、他の行データが更新されました。どこに問題がありますか。これは私のコードです。
public void UpdatePurchseOrderTable(int PO_No,int Supplier_ID, string Date, string RequiredDate, double GrandTotal)
{
DynamicConnection con = new DynamicConnection();
con.mysqlconnection();
string query = "UPDATE TBL_PO "
+ " SET Supplier_ID = @Supplier_ID,Date = @Date,"
+ "RequiredDate = @RequiredDate,GrandTotal=@GrandTotal"
+ " WHERE PO_No = @PO_No";
con.sqlquery(query);
con.cmd.Parameters.Add(new SqlParameter("@PO_No", SqlDbType.Int));
con.cmd.Parameters["@PO_No"].Value = PO_No;
con.cmd.Parameters.Add(new SqlParameter("@Supplier_ID", SqlDbType.Int));
con.cmd.Parameters["@Supplier_ID"].Value = Supplier_ID;
con.cmd.Parameters.Add(new SqlParameter("@Date", SqlDbType.Date));
con.cmd.Parameters["@Date"].Value = Date;
con.cmd.Parameters.Add(new SqlParameter("@RequiredDate", SqlDbType.Date));
con.cmd.Parameters["@RequiredDate"].Value = RequiredDate;
con.cmd.Parameters.Add(new SqlParameter("@GrandTotal", SqlDbType.Money));
con.cmd.Parameters["@GrandTotal"].Value = GrandTotal;
con.nonquery();
}
public void UpdatePOCartTable(int PO_No,string ISBN_No,int OrderQuantity, double UnitPrice, double Total)
{
DynamicConnection con = new DynamicConnection();
con.mysqlconnection();
string query = "UPDATE TBL_PO_Cart"
+ " SET ISBN_No = @ISBN_No, OrderQuantity= @OrderQuantity,"
+ "UnitPrice= @UnitPrice,Total=@Total"
+ " WHERE PO_No = @PO_No";
con.sqlquery(query);
con.cmd.Parameters.Add(new SqlParameter("@PO_No", SqlDbType.Int));
con.cmd.Parameters["@PO_No"].Value = PO_No;
con.cmd.Parameters.Add(new SqlParameter("@ISBN_No", SqlDbType.NVarChar));
con.cmd.Parameters["@ISBN_No"].Value = ISBN_No;
con.cmd.Parameters.Add(new SqlParameter("@OrderQuantity", SqlDbType.NVarChar));
con.cmd.Parameters["@OrderQuantity"].Value = OrderQuantity;
con.cmd.Parameters.Add(new SqlParameter("@UnitPrice", SqlDbType.Money));
con.cmd.Parameters["@UnitPrice"].Value = Math.Round(UnitPrice,2,MidpointRounding.AwayFromZero);
con.cmd.Parameters.Add(new SqlParameter("@Total", SqlDbType.Money));
con.cmd.Parameters["@Total"].Value = Math.Round(Total,2,MidpointRounding.AwayFromZero);
con.nonquery();
}
PO フォーム データは次のとおりです。
private void btnedit_Click(object sender, EventArgs e)
{
DynamicConnection con = new DynamicConnection();
try
{
if (txtPONo.Text != "" || cmbsupID.Text != "" || date1.Text != "" || requireddate.Text != "" || txtgrandTotal.Text != "")
{
PurchaseOrder PO = new PurchaseOrder();
if (cmbsupID.Text.Contains('-'))
{
string str = cmbsupID.Text;
int index = str.IndexOf('-');
if (index > 0)
{
int value = int.Parse(str.Substring(0, index));
PO.UpdatePurchseOrderTable(Convert.ToInt32(txtPONo.Text), value, date1.Text, requireddate.Text, Convert.ToDouble(txtgrandTotal.Text));
}
}
else
{
int value2 = Convert.ToInt32(cmbsupID.Text);
PO.UpdatePurchseOrderTable(Convert.ToInt32(txtPONo.Text), value2, date1.Text, requireddate.Text, Convert.ToDouble(txtgrandTotal.Text));
}
for (int i = 0; i < dataGridView1.Rows.Count-1; i++)
{
int PONO = Convert.ToInt32(txtPONo.Text);
string column1 = Convert.ToString(dataGridView1.Rows[i].Cells[1].Value);
int column2 = Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value);
double column3= Convert.ToDouble(dataGridView1.Rows[i].Cells[3].Value);
double column4 = Convert.ToDouble(dataGridView1.Rows[i].Cells[4].Value);
PO.UpdatePOCartTable(PONO,column1,column2,column3,column4);
}
}
else
{
MessageBox.Show("Please Provide Details!");
}
dataGridView1.Rows.Clear();
ClearData();
retviewPO_No();
MessageBox.Show("Record Updated Successfully");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}