2010-03-16 1 views
1

На моей простой странице asp стартера я создаю DataTable и заполняю его двумя строками. Веб-сайт позволяет пользователям добавлять новые строки. Моя проблема заключается в том, что DataTable не сохраняет информацию. Я прошел через код, и строка добавляется, но в следующий раз, когда добавляется строка, ее там нет, только исходные две и самые новые, которые нужно ввести.ASP.net DataTable не хранит новые строки

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

Мой код:

protected void Page_Load(object sender, EventArgs e) 
    { 
     _Default.NameList = new DataTable(); 
     DataColumn col = new DataColumn("FirstName", typeof(string)); 
     _Default.NameList.Columns.Add(col); 
     col = new DataColumn("LastName", typeof(string)); 
     _Default.NameList.Columns.Add(col); 
     DataRow row = _Default.NameList.NewRow(); 
     row["FirstName"] = "Jane"; 
     row["LastName"] = "Smith"; 
     _Default.NameList.Rows.Add(row); 
     row = _Default.NameList.NewRow(); 
     row["FirstName"] = "John"; 
     row["LastName"] = "Doe"; 
     _Default.NameList.Rows.Add(row); 
    } 

    protected void AddButton_Click(object sender, EventArgs e) 
    { 
     DataRow row = _Default.NameList.NewRow(); 
     row["FirstName"] = this.TextBox1.Text; 
     row["LastName"] = this.TextBox2.Text; 
     _Default.NameList.Rows.Add(row); 
     _Default.NameList.AcceptChanges(); // I've tried with and without this. 
    } 

Я пытался спасти их в GridView контроля, но это кажется совсем немного работы. Я новичок в ASP.Net, но проработал программирование окон на C# в течение последних двух лет.

ответ

1

Каждый раз, когда загружается страница, вы создаете новый объект DataTable.

Вам необходимо сохранить объект DataTable в состояние сеанса или статическую переменную или сохранить данные в базе данных.

0

Помните, что для обработки таких событий, как кнопка, требуется . postback. Вы не запускаете только код клика, вы запускаете весь жизненный цикл страницы в новом экземпляре вашего класса страниц. Новый экземпляр класса вашей страницы также означает новый экземпляр типа datatable.

0

Проблема заключается в том, что ваш DataTable создается каждый раз, когда ваша страница загружается и выходит из области действия, когда ваша страница закончила загрузку и была отображена пользователю. Чтобы получить желаемый эффект, вам нужно будет хранить DataTable в сеансе, в ViewState, кеше, использовать элемент управления, например GridView, который автоматически сохранит базовые данные в своем состоянии или что-то еще.

Поскольку вы новичок в ASP.NET, ознакомьтесь со своими опциями для state management.

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