2015-06-04 6 views
3

У меня есть DataTable, который имеет столбцы, сгенерированные при загрузке страницы. Поскольку я не хочу, чтобы эта таблица была заново создана каждый раз, когда происходит обратная передача, у меня она есть в инструкции no-postback if. К оглавлению:Столбцы в DataTable Disappearing

DataTable purchase_display_data = new DataTable(); 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!IsPostBack) 
    { 
     DataColumn rownumber = new DataColumn(); 
     rownumber.DataType = System.Type.GetType("System.Int16"); 
     rownumber.AutoIncrement = true; 
     rownumber.AutoIncrementSeed = 1; 
     rownumber.AutoIncrementStep = 1; 

     purchase_display_data.Columns.Add(rownumber); 
     purchase_display_data.Columns.Add("Item"); 
     purchase_display_data.Columns.Add("Charge"); 
    } 
} 

Позже, я пытаюсь добавить данные после нажатия кнопки. С:

protected void buttonOK_Click(object sender, EventArgs e) 
{ 
    DataRow newline = purchase_display_data.NewRow(); 
    newline[1] = "1"; 
    newline[2] = "2"; 
    purchase_display_data.Rows.Add(newline); 
} 

При нажатии этой кнопки я возвращаю сообщение о том, что столбец не найден. В отладке я замечаю, что у моего DataTable есть нулевые столбцы, несмотря на то, что они были успешно созданы при загрузке страницы (за отладку и другое тестирование). Кажется, что столбцы просто исчезли. Может кто-нибудь сказать мне, почему это происходит и, конечно, как это исправить.

ответ

4

Вы теряете свои данные на обратной стороне. Это нормально. Вы должны использовать некоторые механизмы управления государством, такие как ViewState или Session, чтобы упомянуть несколько.

Вы можете попробовать это с помощью ViewState:

private DataTable purchase_display_data 
{ 
    get 
    { 
     if (ViewState["purchase_display_data"] == null) 
      ViewState["purchase_display_data"] = new DataTable(); 
     return (DataTable)ViewState["purchase_display_data"]; 
    } 
    set { ViewState["purchase_display_data"] = value; } 
} 
+0

Вы не совсем следующие общие соглашения об именах для вашего имущества, но подход хорош. –

+0

@EricJ. Я знаю, я просто назвал свойство переменной, чтобы не изменять его код в 'Page_Load'. – dario

+0

Как написано, это приводит к ошибке «Object reference not set to a instance of object» при создании столбцов. –

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