我有一个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
{ }
}
因此在datagrid中,当我在Reference Cell中插入时,其他单元格中没有出现任何内容。 谢谢。
答案 0 :(得分:0)
您的代码中至少存在两个问题:
现在,在删除空捕获后,我们可以看到当您尝试乘以值(数量* 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 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();