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
{ }
}
따라서 데이터 그리드에서 참조 셀에 삽입하면 다른 셀에는 아무것도 나타나지 않습니다. 감사합니다.
코드에는 두 가지 이상의 즉각적인 문제가 있습니다.
이제 빈 catch를 제거한 후 값 (quantity * 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();
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다