如何使BackSpace在textchanged事件中正常运行?

时间:2013-04-28 05:37:57

标签: c# winforms

我的表单有三个文本框,即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
    {           
    }
}

2 个答案:

答案 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);