Обновление родительской формы от Child с потоками - PullRequest
2 голосов
/ 03 ноября 2011

Я немного озадачен тем, как решить эту проблему.

У меня есть родительская форма, которая содержит DataGridView, и дочерняя форма, которая используется для ввода некоторых деталей для создания учетной записи.

В форме создания учетной записи, когда пользователь создает учетную запись, он запускает поток, который проходит и регистрирует учетную запись на веб-сайте.Каждый раз, когда создается учетная запись, я хочу:

1) Добавить его в базу данных.Я предполагаю, что это так же просто, как создать соединение и вставить его.Можно ли это сделать из дочерней формы?то есть база данных доступна глобально?

2) Обновить dataGridView в родительской форме?

Важно отметить, что дочерняя форма вызывается с помощью form.showDialog (), который, как я предполагаю, обновляет данныеродительская форма невозможна?Должен ли я использовать form.show ()?

Какой обычный способ делать то, что я хочу достичь?

Спасибо

1 Ответ

2 голосов
/ 03 ноября 2011

Ваш доступ к базе данных не ограничен одной конкретной формой - так что да, вы можете сделать вставку базы данных из дочерней формы. Как сказал 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 в методе обратного вызова вместо события нажатия кнопки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...