我有两个表格,ListFrom
和DetailForm
在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
在这种情况下为空,然后是网格没有刷新
有人有意见吗?
答案 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()