我有一个称为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;
}
}
这里可能是什么问题?
我在另一个论坛上找到了解决方案: 我必须使用FormView中的PreRender触发器。使用下面的代码,它可以正常工作。现在,当我将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();
}
}