从其他表单更新数据
本文关键字:数据 更新 表单 其他 | 更新日期: 2023-09-27 18:36:18
我有拖曳形式、ListFrom
和DetailForm
在ListForm
中,我有一个开发快速网格和一些按钮(添加,删除,编辑)
在DetailForm
中,我有一些文本框和一些按钮(保存,删除,下一个,上一个)
好吧,我必须塞纳里奥
1 - 我打开ListForm,然后单击一个产品进行修改,打开DetailForm
,我进行一些修改并保存,然后我应该使用新值刷新ListForm
中的网格。 为此,我有此代码
在列表中来自
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
在这种情况下为空,然后网格不刷新有人有建议吗?
我将创建一个共享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
。
编辑关于绑定源
这是相当不错的教程,所以请看一下。
下面是一个快速编写的远非我所做的最好的拉伸示例:
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();
.这只是一个标记,但希望您:)了解这个想法。
你必须始终确保你指的是detailform
的当前实例,因此在你的listForm
detailform obj = (detailform)Application.OpenForms["detailform"];
每次您从listForm
拨打detailform
时,请通过obj
例如:
obj.Show()