在我的代码中,我有以下内容:
public void PopulateForm(int i)
{
DAL.TicketsDataSetTableAdapters.TicketDetailsTableAdapter fobj = new DAL.TicketsDataSetTableAdapters.TicketDetailsTableAdapter();
DataTable dt = new DataTable();
dt = fobj.GetTicketUpdates(txtSupportRef.Text);
txtShortDesc.Text = dt.Rows[0].Table.Rows[i]["ShortDesc"].ToString();
txtNextStep.Text = dt.Rows[0].Table.Rows[i]["NextStep"].ToString();
txtLastUpdated.Text = dt.Rows[0].Table.Rows[i]["LastUpdated"].ToString();
}
然后在我背后的代码的另一个区域:
protected void btnNext_Click1(object sender, EventArgs e)
{
int i = (int)ViewState["recordIndex"];
i = i >= dt.Rows[0].Table.Rows.Count - 1 ? 0 : i + 1;
PopulateForm(i);
}
但是当我构建解决方案时,它说:
The name 'dt' does not exist in the current context
答案 0 :(得分:5)
问题与变量范围有关。在方法中声明变量时,它只能在该方法内部访问,并且不存在于该方法之外。
如果要重用该变量内容,则应将其移至更高级别,如类级别:
DataTable dt = new DataTable();
public void PopulateForm(int i)
{
// ...
}
protected void btnNext_Click1(object sender, EventArgs e)
{
// ...
}
但是,在这种情况下,您应该知道dt
变量在调用btnNext_Click1
时将为空,因为它只会在PopulateForm
来电时填充。