【问题标题】:refreshing data in parent form after closing modal form关闭模态表单后刷新父表单中的数据
【发布时间】:2021-05-19 14:24:01
【问题描述】:

我有一个表单,其中有一个FlowLayoutPanel,其中填充了一个显示产品的UserControl 列表。每个UserControl 都有一个按钮,可以打开另一个表单,我用它来编辑数据库中的产品。

我的问题是我不知道如何在更改数据库中的数据或关闭模式对话框后刷新 FlowLayoutPanel 中的数据。

是否可以模仿 DataGridView 和数据源的行为,在每次更改数据库时,我都会在 FlowLayoutPanel 中获得相应的数据????

这是我用来用控件填充 FlowLayoutPanel 的代码!
如果需要,我会添加更多代码!

var result = await _obavijest.GetAll<List<Model.Obavijest>>();
          
foreach (var x in result)
{

    ucObavijest pp = new ucObavijest();

    pp.lblNaslov.Text = x.Naslov;
    pp.lblID.Text = x.ObavijestId.ToString();
    pp.lblDatumVrijeme.Text = x.VrijemeObjave.ToString();

    flpObavijesti.Controls.Add(pp);
   
}

【问题讨论】:

    标签: .net winforms


    【解决方案1】:

    加载表单时,您可能有一些方法,例如getProductsRows() 一种方法是在子表单关闭时调用该方法。如果产品列表很大,则性能很差

    其他方法是保留已修改产品的 ID,当模式表单关闭时调用 getProductRowById(id) 以获取新数据,仅更新已更改的行并刷新网格/列表。

    但由于上述所有方法都只是实现数据绑定的惰性方法,因此最好使用后一种方法

    基本上你只需要在加载时绑定数据,更新数据(只是更改的行),重新绑定应该刷新的数据以显示新数据

    如果您的来源是例如用户字符串列表

    List<string> users = GetUsers();
    BindingSource source = new BindingSource();
    source.DataSource = users;
    dataGridView1.DataSource = source;
    

    然后,当您完成编辑后,只需更新您的数据对象,无论是DataTable 还是此处的用户字符串列表和BindingSource 上的ResetBindings

    users = GetUsers(); //Update your data object
    source.ResetBindings(false);
    

    更新:由于 Bindings 是一个不仅限于 DataGridViews 的概念,因此其他类型的组件也可以通过实现绑定的 UserControl 来实现。

    https://social.msdn.microsoft.com/Forums/en-US/9ebb80cb-9f5d-4bd8-9433-6d857216a102/can-composite-controls-be-databound-to-detail-data-label-textbox-radiobutton-datetimepicker-and?forum=winforms

    【讨论】:

      猜你喜欢
      • 2021-07-15
      • 1970-01-01
      • 2014-05-22
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-15
      • 1970-01-01
      相关资源
      最近更新 更多