我有一个显示构造函数重载的代码..
我的第一个表单是Login.cs,代码是。
private void button1_Click(object sender, EventArgs e)
{
this.Hide();
EmpPanel f = new EmpPanel(textBox1.Text);
f.Show();
}
第二个表格是EmpPanel.cs我有2个构造函数 -
public EmpPanel( string uid)
{
InitializeComponent();
this.id1 = uid;
}
public EmpPanel()
{
InitializeComponent();
this.button1.Enabled = false;
this.ControlBox = false;
}
当我点击它时,第三种形式有一个按钮取消它再次返回到EmpPanel.cs ..
private void button4_Click(object sender, EventArgs e)
{
this.Hide();
EmpPanel ep = new EmpPanel();
ep.Show();
}
问题是,当我点击thirdform的button4然后它初始化EmpPanel.Cs的Id时,记录不会保存在具有该id的数据库中,而不是id保存为0。 为什么..
答案 0 :(得分:0)
您可以根据业务逻辑更改无参数构造函数以设置ID。
但似乎你的id1字段是字符串,所以它的默认行为应该是String.Empty。你确定id1是整数吗?
您可以反转逻辑,以便数据库通过将保留EmpPanel相关条目的数据库表的标识种子设置为yes来处理id生成。
或者您可以像这样更改构造函数:
public EmpPanel()
{
InitializeComponent();
this.button1.Enabled = false;
this.ControlBox = false;
this.id1 = GetMaxEmpPanelId();
}
private int GetMaxEmpPanelId()
{
int maxId = 1000; //get max id from the related table and return it
return maxId;
}
答案 1 :(得分:0)
而不是
EmpPanel ep = new EmpPanel();
ep.Show();
您应该返回到EmPanel的同一个实例。你可以这样做
EmpPanel ep= (EmpPanel) GetOpenedForm<EmpPanel>();
if (ep== null)
{
ep= new EmpPanel();
ep.Show();
}
else
{
ep.Select();
}
其中
public static Form GetOpenedForm<T>() where T: Form {
foreach (Form openForm in Application.OpenForms) {
if (openForm.GetType() == typeof(T)) {
return openForm;
}
}
return null;
}