我的要求是,有一个文本框和一个数据网格,当我通过扫描在文本框中输入文本时,如果该值存在于数据库中,则应将其添加到datagrid,文本框值应为空。 我已将此功能保留在textbox textchanged事件中。
VALUE:
16789
35688
1678934
097544
如果我扫描' 1678934',则对应于' 16789'在网格中添加,只有34个保留在文本框中。我该如何克服这一点。我应该放置一些计时器,以便一旦扫描完成,值可能会被添加到网格中?我该怎么做!或者还有其他事件吗?
我使用了以下代码
private void txtValue_TextChanged(object sender, EventArgs e)
{
if (txtValue.Text != "")
{
dataGridView1.Columns.Clear();
strValue = "SELECT NAME FROM EMPDETAIL WHERE ID = @input";
MySqlCommand cmdValue = new MySqlCommand(strValue, connection);
connection.Open();
cmdValue.Parameters.AddWithValue("@input", input);
MySqlDataAdapter adapterValue = new MySqlDataAdapter(cmdValue);
DataTable dtValue = new DataTable();
adapterValue.Fill(dtValue);
dataGridView1.DataSource = dtValue;
connection.Close();
}
}
编辑:
以下是实现上述功能的代码(根据@ Daniel的答案)
private void textBox2_KeyDown(object sender, KeyEventArgs e)
{
if (txtValue.Text != "")
{
if (e.KeyCode == Keys.Enter)
{
dataGridView1.Columns.Clear();
strValue = "SELECT NAME FROM EMPDETAIL WHERE ID = @input";
MySqlCommand cmdValue = new MySqlCommand(strValue, connection);
connection.Open();
cmdValue.Parameters.AddWithValue("@input", input);
MySqlDataAdapter adapterValue = new MySqlDataAdapter(cmdValue);
DataTable dtValue = new DataTable();
adapterValue.Fill(dtValue);
dataGridView1.DataSource = dtValue;
connection.Close();
}
}
}
答案 0 :(得分:1)
问题当然是如果产品“123”存在,则在扫描产品“1234”时会发现它。您可以使用您建议的计时器解决此问题,但您真的不希望这样。
条形码扫描仪(通常,可配置)在扫描后添加字符,例如换行符(\n
)。
不是在TextChanged事件中查找记录,而是在表单中添加一个默认按钮(该新行将被解释为Enter键按下),或者使用KeyPress事件找出何时输入终止字符