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

如何在MYSQL C#中填充DataGridView单元格?,c#,mysql,datagridview,C#,Mysql,Datagridview,我有一个4-5列的DataGridView。 DataGridView是可编辑的。当我在Reference列中输入一个值时,它将立即填充mysql数据库中其他单元格中的其他值。 这就是我试过的 private void TAB_Credit_CellValueChanged(object sender, DataGridViewCellEventArgs e) { try { if (TAB_Cre

我有一个4-5列的DataGridView。
DataGridView是可编辑的。
当我在Reference列中输入一个值时,它将立即填充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中,当我在引用单元格中插入时,其他单元格中没有显示任何内容。
谢谢。

您的代码中至少有两个即时问题:


  • 第一:不要写空的try/catch块。如果出了什么差错 你永远不会知道。删除并检查是否存在任何异常
  • 第二:你认为如果有人输入:1';升降台 参考资料;——在你的牢房里?不要这样做,看一看
现在,在删除空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();

第一:不要写空的try/catch块。如果发生了什么错误,你永远不会知道。删除并检查是否存在任何异常。然后发布错误消息第二条:如果有人键入:1',你认为会发生什么;删除表引用;--在你的牢房里?不要这样做,看看这个错误来了这个
double value=(double)TAB_Credit.Rows[e.RowIndex].Cells[“Quantite”].value*(double)TAB_Credit.Rows[e.RowIndex].Cells[“PU”].value,我有以下错误:
System.InvalidCastException
,因此该错误与单元格中存在的无效值有关。单元格中存在哪些值?这些值可以转换为双精度吗?是的,这些值是像250000这样的小数。为什么它只对第一行有效?当我写第二行的时候,没有任何东西在填充…不知道,也许你应该问一个新的问题,并提供更多关于如何调用此代码的详细信息。更多的人将可以看一看