簡體   English   中英

如何在MYSQL C#中填充DataGridView單元?

[英]How to fill DataGridView Cells in MYSQL C#?

我有一個4-5列的DataGridView。
DataGridView是可編輯的。
當我在“參考列”中輸入一個值時,它將立即填充其他值
在mysql數據庫的其他單元格中。
這就是我嘗試過的...

private void TAB_Credit_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {

            try
            {
                if (TAB_Credit.CurrentCell.ColumnIndex == 0)
                {

                    MySqlDataAdapter sa = new MySqlDataAdapter("SELECT * FROM table WHERE Reference='" + TAB_Credit.Rows[e.RowIndex].Cells["Reference"].Value + "'", MyConnexion);
                    DataTable dt2 = new DataTable();

                    sa.Fill(dt2);

                        double value = (double)TAB_Credit.Rows[e.RowIndex].Cells["Quantite"].Value * (double)TAB_Credit.Rows[e.RowIndex].Cells["PU"].Value;

                        TAB_Credit.Rows[e.RowIndex].Cells["Designation"].Value = dt2.Rows[0]["Designation"].ToString();
                        TAB_Credit.Rows[e.RowIndex].Cells["Quantite"].Value = dt2.Rows[0]["Quantite"].ToString();
                        TAB_Credit.Rows[e.RowIndex].Cells["PU"].Value = dt2.Rows[0]["Prix_Unitaire"].ToString();
                        TAB_Credit.Rows[e.RowIndex].Cells["Total"].Value = value.ToString();


                    }

            }
            catch
            { }
        }

因此,在數據網格中,當我在參考單元格中插入其他單元格時,什么也沒有出現。 謝謝。

您的代碼中至少有兩個直接的問題:

  • 第一:不要寫空的try / catch塊。 如果發生任何錯誤,您將永遠不會知道。 刪除並檢查是否有任何異常。
  • 第二:如果有人鍵入:1'; DROP TABLE引用;-在您的單元格中,您會怎么辦? 不要這樣做,看看這個

現在,在刪除空捕獲之后,我們可以看到問題是由試圖乘以值(數量* PU)引起的無效強制轉換異常引起的。 應該通過正確轉換來自單元格的兩個對象值來解決此問題。

double qty = Convert.ToDouble(TAB_Credit.Rows[e.RowIndex].Cells["Quantite"].Value);
double pu = Convert.ToDouble(TAB_Credit.Rows[e.RowIndex].Cells["PU"].Value);
double value = qty * pu;

但是,如果直接從您的用戶鍵入這些單元格,那么Convert.ToDouble也有其缺點。 如果輸入類似“ ABC”,則會引發異常。 在這種情況下,您使用double.TryParse並在輸入不是有效的double時向用戶發送消息

double qty;
if(!double.TryParse(TAB_Credit.Rows[e.RowIndex].Cells["Quantite"].Value.ToString, out qty))
{
   MessageBox.Show("Invalid input for quantity");
   return;
}

最后,我們需要使用參數化查詢來修復sql注入漏洞

string cmdText = @"SELECT * FROM table 
                   WHERE Reference=@ref"
MySqlDataAdapter sa = new MySqlDataAdapter(cmdText, MyConnexion);
sa.SelectCommand.Parameters.Add("@ref", MySqlDbType.VarChar).Value = 
        TAB_Credit.Rows[e.RowIndex].Cells["Reference"].Value.ToString();

暫無
暫無

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

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