0

我在visual studio 2010 中使用datarepeater 控件,版本10.0。当我使用鼠标移动到下一行时,CurrentItemIndex 似乎在文本框离开事件之前更新。因此,当我从文本框中检索值时,我现在不知道它与什么 ItemIndex 相关联。当使用键盘移动到下一行时,不会发生这种情况。任何人都看到这种情况发生。datarepeater 上的 9.0 版确实以这种方式工作。

4

1 回答 1

0

为了直接回答你,这里有一些 C# 片段。我假设您已经拥有问题中暗示的 TextBox 对象(或其他控件)。我还将假设您在一个事件处理程序中(例如 TextChanged)。如果您还没有这样做,则需要使用对象发送器参数而不是设计时声明的 TextBox 控件(即不要使用 TextBox1 或类似对象),因为它只会引用 DataRepeaterItem 模板控件而不是您感兴趣的数据行的单独控件。

    TextBox itemTextBox = sender as TextBox;

    //* DataRepeaterItem is a control which contains other controls for each data "row"
    DataRepeaterItem drItem = itemTextBox.Parent as DataRepeaterItem;

    //* Retrieve the particular data item
    int idx = drItem.ItemIndex;

    //* If DataRepeater is bound to a BindingSource, for example, 
    //*   one can retrieve the underlying data item
    object dataItem = myBindingSource.List[idx];

我在使用 DataRepeater 控制焦点和数据更新方面遇到了各种错误和挑战。无法保证事件触发的确切顺序:Leave、LostFocus、CurrentItemChanged 等。正如您所观察到的,它会有所不同,具体取决于您是在 DataRepeater 中使用鼠标还是在表单上的另一个控件中使用鼠标或使用键盘。可能确实有一个既定的算法,但我观察到与文档的差异。当数据处理框架(例如 BindingSource、CurrencyManager)也订阅这些事件并按照您可能期望或想要的方式无序地更新事物时,情况就很复杂了。我没有关于如何处理这些问题的建议,但我希望上面的代码至少可以让您访问您所在控件的特定索引和数据。

于 2013-08-22T18:27:02.267 回答