文本框具有焦点时,将文本框文本更新为DB

时间:2011-07-15 09:36:53

标签: c# winforms

我正在寻找将文本框文本值更新为DB的最佳解决方案,同时文本框仍包含焦点。我不想在TextChanged或Leave事件上这样做,考虑到我需要从DB查询实际值,即使文本框包含焦点并且用户停止输入。

2 个答案:

答案 0 :(得分:1)

Every X seconds (Using a Timer)

    if (txtMyTextBox.Text != previousText)
       previousText = txtMyTextBox.Text;
    else //(if the text is the same before X seconds)
         //User has stopped typing! Save it to the database
         //Stop the timer!
TextChange事件txtMyTextBox将检查Timer是否已停止,如果是,请重新启动。

X 是之后的秒数,如果没有收到任何输入,则表示您确定该用户已停止输入。

鉴于有很多文本框,这可能会非常麻烦:S所以我肯定应该有一个更好的方法。

答案 1 :(得分:0)

我会采取另一种方式:

首先定义何时假设用户停止输入。 LostFocus是一个非常好的指示,因为用户明确地离开了文本框。超时不太值得信赖,因为用户可能在打字时很慢或者可能会分心。拥有该程序然后更改文本可能会使用户感到困惑。

您甚至可以创建一个双值文本框控件:一个输入字段接受用户输入另一个(只读)字段,显示数据库中的当前值。此控件可能有一个按钮,允许用户接受数据库中的值。

这就像试图躲避经典乐观并发问题的讨厌方面一样:如果数据库中的值在编辑期间发生了变化会怎么样?

您在此处创建的解决方案有很多开销,可能不值得(查看网络流量...)只需允许用户输入值即可。将其传递回数据库,捕获冲突并允许用户处理冲突。这样可以更好地扩展,并且更容易实现。