如何使退格像正常的textchanged事件

本文关键字:textchanged 事件 何使退 | 更新日期: 2023-09-27 18:11:07

我有一个表单,它有三个文本框名称-id,名称,地址。

在id上使用textchanged事件,当i输入id(1,2,3,…)时,姓名和地址字段将自动从数据库中填充。我这样做了,但是当我按退格键时,visual studio会触发异常。

当我按退格键时,我希望它像普通退格一样。我怎样才能做到这一点呢?

请帮帮我。

void showData1()
{
    con = new SqlConnection("Data Source=lakhe-pc;Initial Catalog=samplepractice;Integrated Security=True");
    con.Open();
    cmd = con.CreateCommand();
    cmd.CommandText = "spShowCustomer1";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("id", SqlDbType.Int);
    cmd.Parameters["id"].Value = txtId.Text;
    adap = new SqlDataAdapter(cmd);
    ds = new DataSet();
    adap.Fill(ds, "customer");
    txtName.Text = ds.Tables[0].Rows[0].ItemArray[0].ToString();
    txtAddress.Text = ds.Tables[0].Rows[0].ItemArray[1].ToString();
    cmd.ExecuteNonQuery();
    con.Close();
}
private void txtId_TextChanged(object sender, EventArgs e)
{            
    try
    {
        showData1();
    }
    catch
    {
        MessageBox.Show("Something unexpected happened.Please be patient.");
        txtId.Clear();
        txtName.Clear();
        txtAddress.Clear();
    }
    finally
    {           
    }
}

如何使退格像正常的textchanged事件

当文本框为空时,不应该调用showData1()方法。

例如,当文本框中有1时,按退格键,文本框变为空,并引发TextChanged事件。你应该检查这种情况:

private void txtId_TextChanged(object sender, EventArgs e)
{            
    if (!string.IsNullOrWhiteSpace(txtId.Text))
        showData1();
    //...
}

到你的异常

Failed to convert parameter value from a String to a Int32.

我猜你的问题在这里

cmd.Parameters.Add("id", SqlDbType.Int);
cmd.Parameters["id"].Value = txtId.Text;

你告诉形参是Int类型,并提供一个文本值。

试试这个(不要忘记检查字符串Null或Empty)。

cmd.Parameters.Add("id", SqlDbType.Int);
cmd.Parameters["id"].Value = Convert.ToInt32(txtId.Text);