0

我在一个页面上有 400 多个文本框。该页面是纸质表格的精确复制品。用户将编辑所有字段,然后将数据保存到数据库。数据被从 SQL DB 拉到 DataTable 中。

我计划通过相同的 DataTable 或仅通过批量更新来保存数据。不是100%。但是,我需要访问该数据。也许我没有把这下一个最好的部分做得最好,如果我不是,如果我被告知有更好的方法,我会很感激的。

当 DataTable 获取数据时,我将每个字段分配到适当的控件中。下面是如何添加数据的示例。

foreach (DataRow CDR in ClaimDataTable.Rows){
    if (CDR["BoxNumber"].ToString() == "1.1")
        this.Box1_1.Text = CDR["DataValue"].ToString();
    if (CDR["BoxNumber"].ToString() == "1.2")
        this.Box1_2.Text = CDR["DataValue"].ToString();
    if (CDR["BoxNumber"].ToString() == "1.3")
        this.Box1_3.Text = CDR["DataValue"].ToString();

我编写了一些代码来自动创建该代码。所以我没有手动编写所有 400 多行。

我当时的想法是,我可以为每个 TextBox 添加一个 LostFocus 事件。然后当控件失去焦点时,我会创建一个带有框名和框值的类。将其添加到列表中,当它们准备好保存时,只需遍历列表并使用 BoxNumber 和框数据进行批量更新。

这可行吗?或者有没有更好的方法?

谢谢!

4

2 回答 2

3
  1. 查看事件路由
  2. 您不应该创建和访问单个文本框,而是让框架通过数据模板化集合来创建它们,您上面的代码太恐怖了。
于 2013-06-25T15:07:24.340 回答
2

当 DataTable 获取数据时,我将每个字段分配到适当的控件中。

WPF 是数据绑定,通常不会像您提到的那样加载控件。为什么代码没有将每个控件绑定到遵循 INotifyPropertyChanged 的​​属性?

  1. 让页面的 DataContext (DC) 指向遵循 InotifyPropertyChanged 接口的实例化类。以这种方式设置 DC 将允许页面上的所有控件默认使用其数据上下文。
  2. 在要为 DC 实例化的类中,创建一个成员属性,该属性在使用 INotifyPropertyChanged 系统设置值时调用 PropertyChanged。
  3. 将每个 TextBox Text 属性绑定到类上的该属性。

然后每个需要该值的控件将在设置后自动显示它,例如在本例中。

<TextBlock Name="tbHeader"
           Text="{Binding CDRData}" />

然后只需将值写入名为 CDRData 的属性一次,所有绑定的文本框都会获取该值。

于 2013-06-25T15:48:18.907 回答