如何使退格像正常的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
{
}
}
当文本框为空时,不应该调用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);