c# - 如何在 MYSQL C# 中填充 DataGridView 单元格?

标签 c# mysql datagridview

我有一个包含 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/

相关文章:

javascript - 通过调用函数自动更新站点

c# - 使用键盘选择项目时组合框崩溃

vb.net - VB.net如何设置DataGridView的大小

mysql - 如何将本地MySQL数据库中的数据同步到Cloud SQL数据库?

php - PDO/mysqli 查询不会返回与带有正则表达式的 mysql cli 相同的行

c# - 将Datagridview中的数据保存到MySQL

c# - 如何检查 DataGridView 是否包含列 "x"并且列 "x"是否可见?

c# - 如何检查请求是否进入具有 [Authorize] 属性的方法?

c# - 如何在MonoDevelop中使用BigInteger类?

backup - mysql备份保留关系