我对如何解决这个问题感到有些困惑。
我有一个包含DataGridView的父表单,以及一个用于输入帐户创建细节的子表单。
在帐户创建表单上,当用户创建帐户时,它会启动一个线程并在网站上注册该帐户。每次创建帐户时我都想:
1)将其添加到数据库中。我认为这就像创建连接并插入它一样简单。可以从子表单中完成吗?即全球数据库是否可访问?
2)更新父窗体上的dataGridView?
重要的是要注意使用form.showDialog()来调用子表单,我认为这样更新父表单是不可能的?我应该使用form.show()?
实现我想要实现的目标的传统方式是什么?
谢谢
答案 0 :(得分:2)
您的数据库访问不限于一个特定的表单 - 所以是的,您可以从子表单执行数据库插入。像DOTNETBEE所说的那样,您可以使用委托来更新父表单:
public partial class MainForm : Form
{
public MainForm ()
{
InitializeComponent();
}
private void btnAccount_Click(object sender, EventArgs e)
{
AccountForm objAccountForm = new AccountForm();
objAccountForm.CreateAccount+= new ChangeStatusHandler(objAccountForm_CreateAccount);
objAccountForm.Show();
}
public void objAccountForm_CreateAccount(string accountName)
{
//Add account to grid.
}
}
public delegate void CreateAccountHandler(string accountName);
public partial class AccountForm: Form
{
public event CreateAccountHandler CreateAccount;
public AccountForm()
{
InitializeComponent();
}
private void btnCreate_Click(object sender, EventArgs e)
{
...
//Create your account.
...
if (CreateAccount!= null)
{
CreateAccount(txtAccountName.Text);
}
}
}
如果您想要返回多个帐户名称,只需更改CreateAccountHandler签名以返回帐户类,或者创建一个包含您需要的所有属性的EventArgs类。
如果创建帐户可能需要很长时间而且需要在线程上执行,请使用BackGroundWorker,然后在回调方法中调用CreateAccount委托,而不是在按钮单击事件中。