一个通知添加和更新数据
本文关键字:添加 更新 数据 通知 一个 | 更新日期: 2023-09-27 18:35:39
我通常在我的Web项目中使用一个Web表单来添加和更新数据。我只是划伤了winforms环境,所以我正在考虑使用相同的方法来添加和更新数据。
我想在addEditForm上使用两个构造函数,例如
public AddEditForm()
{
.. to do new object
}
public AddEditForm(MyDataObj obj)
{
... to do edit
}
那么,这是正确的方法还是有更好的做法?
谢谢
正如我在评论中所说,我也使用这种方法,当然当我不使用 MVP 时(这是另一回事)
关于调用 InitializeComponent(),您需要在表单构造中使用它,因为它是初始化表单和控件的方法(从它的名称中可以看出),没有它,您将获得一个空表单。
但是如果你担心调用 InitializeComponent() 两次,我更喜欢这个:
MyDataObj _myObject;
public AddEditForm()
{
InitializeComponent();
}
public AddEditForm(MyDataObj obj)
:this()
{
if(obj == null) //you're creating the object
_myObject = new MyDataObj();
else // you're editing it
_myObject = obj;
}
// Continue my work with _myObject
可以通过以下方式创建不同的构造函数:
MyDataObj editItem=null;
public AddEditForm()
{
InitializeComponent();
//Other common code for initialization.
}
public AddEditForm(MyDataObj obj) : this()
{
editItem = obj;
//Other code specific to editing.
}
如果对象editItem
为 null,则可以在"添加"模式下考虑表单,否则可以考虑在"编辑"模式下。
为相同的属性制作例如:
public bool IsEditMode
{
get
{
return (editItem != null);
}
}
希望对...
您发布的方法就是创建此类表单的常规方法。
但有时你会看到这样的东西。
public AddEditForm(MyDataObj obj, int mode) //1 = edit, 2 = create
{
... to do edit
}
如果您考虑一下,这不是一个好的选择。它更难理解,看起来很丑。
我需要在每个构造函数中调用 InitializeComponent() 吗?
除非您进行构造函数链接(这在这里不起作用),否则是的,您会这样做。请查找@Virus答案,寻找仅调用一次的方法。
正确的方法是:
public partial class CustomerForm: Form
{
private object instance;
public CustomerForm()
{
InitializeComponent();
SetData(BLL.CreateNewEmptyObject());
}
public CustomerForm(object details)
: this()
{
SetData(details);
}
public void SetData(object details)
{
instance = details;
//bind the details to controls
}
private void Save()
{
BLL.Save(instance);
}
public bool EnableEdit {get{...
}
使用示例:
var newCustomerFrm = new CustomerForm();
var existingCustomerFrmReadOnly = new CustomerForm(BLL.GetCustomerById("123"))
{
EnableEdit = false
};
var existingCustomerFrmToEdit = new CustomerForm(BLL.GetCustomerById("123"))
{
EnableEdit = true
};