2015-10-24 2 views
-3

В моем коде я следующее:Локальная переменная не доступна из другого метода

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

Я хочу сделать код повторно использовать. Я не хочу создавать экземпляр данных больше, чем я. – PriceCheaperton

+5

Это действительно просто. Вы объявляете dt как локальную переменную в методе PopulateForm. Вне этого метода он не существует – Steve

+0

Да, это может быть базовым ... Но я не знал о публичных и частных .... – PriceCheaperton

ответ

5

Проблема связана с областью переменных. Когда вы объявляете переменную внутри метода, она может быть доступна только внутри этого метода и не существует вне нее.

Если вы хотите использовать это переменное содержимое, вы должны переместить его на более высокий уровень, как уровень класса:

DataTable dt = new DataTable(); 

public void PopulateForm(int i) 
{ 
    // ... 
} 

protected void btnNext_Click1(object sender, EventArgs e) 
{ 
    // ... 
} 

Но, в этом случае, вы должны знать, переменная dt будет пустыми когда вы вызываете btnNext_Click1, так как он будет заполнен только по звонку PopulateForm.

+0

Это должно быть только на уровне класса, если состояние должно быть общим. Если это делается только для того, чтобы дать единую декларацию, тогда это потенциально приведет к ошибкам кода. – Enigmativity

+0

@ Энигматичность, вы правы: «Если вы хотите повторно использовать это содержимое переменной (...)», –

Смежные вопросы