Ошибка нулевой ссылки при вызове метода - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть метод с именем NewBatch_GetAndSetBatchID.

Когда я вызываю этот метод в методе Page_Load, он отлично работает.

Но когда я вызываю этот метод с кнопки (на той же странице), я получаю:

Исключение нулевой ссылки. Ссылка на объект не установлена ​​для экземпляра объекта.

Выдает ошибку по адресу:

BatchNoTextBox.Text = (batchID += 1).ToString();

При отладке я вижу, что мойbatchID заполнен значением.

Это мой код:

public void NewBatch_GetAndSetBatchID()
    {
        FormView1.ChangeMode(FormViewMode.Insert);


        string connectionString = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString;
        try
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                SqlCommand sqlCommando = new SqlCommand("SELECT MAX(BatchNo) FROM BM_BrewBatchHeader", conn);

                try
                {
                    conn.Open();
                    batchID = Convert.ToInt32(sqlCommando.ExecuteScalar());
                }
                catch (Exception)
                {

                }
                finally
                {
                    conn.Close();
                }
            }
        }
        catch (SqlException error)
        {

        }

        try
        {
            TextBox BatchNoTextBox = (TextBox)FormView1.FindControl("BatchNoTextBox");
            BatchNoTextBox.Text = (batchID += 1).ToString();
        }
        catch (Exception)
        {
            throw;
        }
    }

В чем здесь проблема?

Я нашел решение на другом форуме: У меня естьиспользовать триггер PreRender из FormView.С кодом ниже он работает нормально.Когда я теперь устанавливаю Formview для режима вставки или редактирования, код выполняется идеально.

protected void FormView1_PreRender(object sender, EventArgs e)
        {
            // if the mode is Edit or Insert
            if (this.FormView1.CurrentMode == FormViewMode.Edit || this.FormView1.CurrentMode == FormViewMode.Insert)
            {
                TextBox BatchNoTextBox = (TextBox)FormView1.FindControl("BatchNoTextBox");
                BatchNoTextBox.Text = (batchID += 1).ToString();
            }
        }
...