我有一个包含 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 block 。如果发生任何错误 你永远不会知道。拆下检查是否有异常。
- 第二:如果有人输入:1';DROP TABLE,您认为会发生什么 引用文献;-- 在你的牢房里?不做看看at this
现在,删除空捕获后,我们可以看到问题是由当您尝试乘以值(数量*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注入(inject)漏洞
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();
关于c# - 如何在 MYSQL C# 中填充 DataGridView 单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43694175/