У меня есть метод с именем 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();
}
}