ASP.net DataTable не хранит новые строки - PullRequest
1 голос
/ 16 марта 2010

На моей простой стартовой странице asp я создаю DataTable и заполняю его двумя строками. Веб-сайт позволяет пользователям добавлять новые строки. Моя проблема в том, что 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, но последние два года занимался программированием Windows на C #.

Ответы [ 3 ]

1 голос
/ 16 марта 2010

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

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

0 голосов
/ 16 марта 2010

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

Поскольку вы новичок в ASP.NET, проверьте параметры управление состоянием .

0 голосов
/ 16 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...