我的表单有三个文本框,即id,name,address。
在id上使用textchanged事件时,当我输入id(1,2,3,...)时,会自动从数据库中填充名称和地址字段。我这样做但是当我按退格键时,视觉工作室会发出异常。
当我按退格键时,我希望它像普通的退格键一样。我怎么能实现这个呢?
Plz帮帮我。
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
{
}
}
答案 0 :(得分:0)
当文本框为空时,不应调用showData1()
方法。
如果您的文本框中有1
,并且按 Backspace 键,则文本框将变为空,并引发TextChanged
事件。你应该检查一下这种情况:
private void txtId_TextChanged(object sender, EventArgs e)
{
if (!string.IsNullOrWhiteSpace(txtId.Text))
showData1();
//...
}
答案 1 :(得分:0)
度Acc。你的例外
Failed to convert parameter value from a String to a Int32.
我想你的问题就在这里
cmd.Parameters.Add("id", SqlDbType.Int);
cmd.Parameters["id"].Value = txtId.Text;
您告诉参数是Int类型并提供文本值。
请尝试这样做(不要忘记对String Null或Empty进行一些检查)。
cmd.Parameters.Add("id", SqlDbType.Int);
cmd.Parameters["id"].Value = Convert.ToInt32(txtId.Text);