这里我们使用if语句,并且第一次可以正常工作
然后,当我输入条形码并再次按Enter时,它将直接指向else语句 它的意思是向我显示错误消息,就像我们在else语句上看到的一样,我认为它不会像新过程一样重复整个语句,因为我从条件上确定它是真实的并且不应该转到else语句 但是第三次当我尝试输入条形码并从条件开始检查时,它像第一次一样工作正常,然后第四次再次显示错误
为什么第二次显示错误
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
if (checkBox1.Checked)
{
if (qtystate == true)
{
DataTable dt;
barcode = textBox1.Text;
dt = pro.GetProdcutBar(textBox1.Text);
if (dt.Rows.Count > 0)
{
foreach (DataRow row in dt.Rows)
{
barcode = row[0].ToString();
itemno = row[1].ToString();
itemname = row[2].ToString();
salespric = row[3].ToString();
costprice = row[4].ToString();
}
cont.addprodcuttocount(Convert.ToString(barcode), Convert.ToString(itemno), Convert.ToString(itemname),
Convert.ToString(salespric), Convert.ToString(costprice), "1", DateTime.Now, SystemInformation.ComputerName);
refershgridview();
//sum qty
try
{
int sum = 0;
for (int i = 0; i < dataGridView1.Rows.Count; ++i)
{
if (Convert.ToString(dataGridView1.Rows[i].Cells[1].Value) == textBox1.Text)
{
sum += Convert.ToInt32(dataGridView1.Rows[i].Cells[6].Value);
}
}
label3.Text = "Barcode " + barcode + " - " + "Item NO" + itemno + " - " + "item name " + itemname + " - " + "qty " + sum.ToString();
}
catch
{
}
barcode = "";
itemno = "";
itemname = "";
salespric = "";
costprice = "";
qtyitem = "";
textBox1.Clear();
textBox1.Focus();
}
else
{
MessageBox.Show("00barcode not found", "barcode", MessageBoxButtons.OK, MessageBoxIcon.Stop);
barcode = "";
itemno = "";
itemname = "";
salespric = "";
costprice = "";
qtyitem = "";
textBox1.Clear();
textBox1.Focus();
}
}
}
}
}
答案 0 :(得分:0)
if...else
块的判别符是此行:
if (dt.Rows.Count > 0)
对函数的其他每次调用都将执行if
子句的主体。对于其余的调用,将执行else
子句。
基于这些症状,似乎有些东西正在改变此行的结果:
dt = pro.GetProdcutBar(textBox1.Text)
在一半的通话中,您至少得到一行;在其他情况下,您得到零行。您的问题是,为什么结果每次其他呼叫都会改变?
引起人们注意的几个原因:
您的GetProdcutBar方法不会简单地检索数据,而是会修改数据(副作用)。这是不可取的,因为它掩盖了您的结果集随每次调用而变化的事实。
程序中的另一种方法是更改数据。这可能是对用户活动(例如,单击鼠标)的响应。
检索数据的基础代码以这样的方式编写,即它返回无法可靠预测的一组数据(即,它是不确定的)。选择标准之一可能使用一天中的时间或时钟滴答,线程ID或其他一些易失性值。
如果出现上述任何一种情况,则您的数据可能会从一个调用更改为下一个调用,可能不会返回任何结果。检查该函数,并确保它在每次调用时都可靠地返回您期望的数据,并且您没有使用可变函数参数(除非绝对必要)。
此外,作为一个离别的想法:如果查询未返回任何记录,这是否真的是错误条件?在大多数情况下,不是这样(除非查询用于所需的查找数据)。关键要做的是处理所有可用的行,如果没有要处理的数据,则什么也不做。