从其他表单更新数据

时间:2013-10-21 09:55:44

标签: c#


我有两个表格,ListFromDetailForm
ListForm我有一个devexpress网格和一些按钮(添加,删除,编辑)
DetailForm我有一些文本框和一些按钮(保存,删除,下一个,上一个)
好吧,我必须先生 1 - 我打开ListForm,然后点击产品进行修改,打开DetailForm,我做了一些修改然后保存,然后我应该让ListForm中的网格刷新value.for this我有这个代码

在ListFrom中

FrmProduit frm = new FrmProduit(monProduit.Id) { MdiParent = this.MdiParent};
frm.updateDataInGridView += new System.Action(refereshGridView);
frm.Show();
详细信息中的

 if (updateDataInGridView != null)
      updateDataInGridView();

在这种情况下,一切正常

第二种情况 如果我打开detailFrom,之后打开listForm,我会在detailFrom中进行一些更改,我点击保存updateDataInGridView在这种情况下为空,然后是网格没有刷新 有人有意见吗?

2 个答案:

答案 0 :(得分:1)

我会创建一个共享的BindingSource,两个表单都会用来显示数据。如果在BindingSource中更改了任何项目,则需要注意通知所有控件绑定到它,因此它会自动刷新网格。

第二种方法是将refereshGridView方法设为公开,DetailForm save click上执行此操作:

var lists = Application.OpenForms.OfType<Form>().Where(x => x.GetType() == typeof(ListFrom));

foreach (var listform in lists)
{
    listform.refereshGridView();
}

我没有使用FirstOrDefault,因为可能会打开多个listform

关于绑定源的编辑

Here是一个非常好的教程,所以请看一下。

以下是我写的一篇写得很快的最好的例子:

internal static class DataSources
{
     private static BindingSource bs;

     public static BindingSource CerateDataSource(List<object> yourObjects)
     {
          bs = new BindingSource();
          bs.DataSource = yourObjects;
     }

     public static BindingSource GetDataSource()
     {
          return bs;
     }

     public static void Reset()
     {
          bs.ResetBindings(false);
     }
}

然后在listview

dataGridView1.DataSource = DataSources.GetData();

并且在detailsview中,您正在编辑保存时BindingSource中的一个对象,您必须致电:DataSources.Reset();。这只是一个标记,但希望你能得到这个想法:)。

答案 1 :(得分:0)

您必须始终确保引用detailform的当前实例,从而在listForm

上声明
detailform obj = (detailform)Application.OpenForms["detailform"];

每次您从detailform拨打listForm,请obj执行此操作,例如:

obj.Show()