Обновление SQL после закрытия формы - PullRequest
1 голос
/ 14 февраля 2012

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

       private void submitButton_Click(object sender, EventArgs e)
        {
//Get form values
                try
                {
//Open test connection
                }
                catch (Exception ex)
                {
//Handle errors
                }
                finally
                {
//Close test connection
                }

                //Run the SQL statements
                try
                {
//Inser SQL data
                }
                catch (Exception ie)
                {
//Handle errors
                }
                finally
                {
                    //Close the connection
                    if (conn.State != ConnectionState.Closed)
                    {
//Close the connection
                    }
                     //Close the window
                     this.Close();
                     //Tell the main form to reload SQL data (not working)
                     mainForm firstForm;
                     firstForm = new mainForm();
                     firstForm.refreshCall();

                }

            }
        }

Таким образом, в основном, когда пользователь нажимает OK (submitButton), данные вставляются, окно закрывается и вызывается метод refreshCall(). Мой метод "refreshCall" должен обновить данные SQL, которые выводятся в основной форме, например:

public void refreshCall()
{
    SqlConnection conn = new SqlConnection("Data Source=SERVER\\SQL_DB;Initial Catalog=dataTable;Integrated Security=True");
    try
    {
        conn.Open();
        DataSet ds = new DataSet();
        SqlDataAdapter adapter = new SqlDataAdapter("SELECT part_num from dbo.Parts", conn);
        adapter.Fill(ds);
        this.listParts.DataSource = ds.Tables[0];
        this.listParts.DisplayMember = "part_num";
        conn.Close();
    }
    catch (SqlException odbcEx)
    {
        MessageBox.Show("There was an error connecting to the data source.\nError Code: 1001", "Database Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }

}

Однако, когда этот метод вызывается, данные остаются не обновленными, что означает, что мне нужно закрыть приложение и перезагрузить его, чтобы увидеть мои изменения. Есть ли что-то, что я делаю неправильно в своем коде, что приводит к тому, что данные SQL остаются неизменными? Есть лучший способ сделать это? Следует также отметить, что я использую точно такой же код из refreshCall для загрузки данных при инициализации формы, и она отлично работает.

Любая помощь приветствуется!

Ответы [ 2 ]

3 голосов
/ 14 февраля 2012

Похоже, что вторая форма создает новый экземпляр главной формы.Новый экземпляр никогда не отображается.Вам необходимо получить существующую основную форму для вашего refreshCall.

1 голос
/ 14 февраля 2012

В основной форме, когда вы открываете вторую форму, вы можете использовать следующий код:

// the ShowDialog will open your second form and then you use your DialogResult 
//  from the second form to tell your main form to refresh the data
yourSecondForm openSecondForm = new yourSecondForm.ShowDialog();
if(openSecondForm.DialogResult == DialogResult.OK)
{
    refreshCall()
}

, затем во второй форме в блоке finally:

finally
{
    //Close the connection
    if (conn.State != ConnectionState.Closed)
    {
        //Close the connection
    }
    //Close the window
    DialogResult = DialogResult.OK;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...