Почему не удаляется последний ряд в репитере? - PullRequest
0 голосов
/ 10 ноября 2010

У меня есть данные повторителя ASP .NET, привязанные к DataTable.Все работает нормально, когда я могу добавить строки в DataTable & Bind(), а Repeater будет изящно отображать вновь связанные данные и удалять из DataTable и Bind(), а Repeater удалит данные.

Однако существует странная проблема, когда при удалении строк последняя стоящая строка, хотя и полностью удаляемая из таблицы данных, все равно будет отображаться на веб-странице.Это как если бы для последней строки Repeater не был привязан к данным!Но я поставил точки останова и проанализировал, что элемент определенно удаляется из DataTable, а также вызывается Repeater1.DataBound ().Если страница обновляется, последний элемент также удаляется (как и должно быть).

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

if (dtTelephoneNumbers.Rows.Count == 0)
                dtTelephoneNumbers.Clear();

Так почему удаление всего остального работает отлично, а удаление последней стоящей строки является ошибочным?Любые идеи?

Вот мой код удаления.

protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        if (e.CommandName == "DeleteNumber")
        {

            string[] commandArgs = e.CommandArgument.ToString().Split(new char[] { ',' });

            DataRow toDelete = dtTelephoneNumbers.Rows.Find(new object[] { commandArgs[0], commandArgs[1] });                

            dtTelephoneNumbers.Rows.Remove(toDelete);

            Debug.WriteLine("dtTelephoneNumbers count = " + dtTelephoneNumbers.Rows.Count);

            if (dtTelephoneNumbers.Rows.Count == 0)
                dtTelephoneNumbers.Rows.Clear();

            Repeater1.DataSource = dtTelephoneNumbers;

            Repeater1.DataBind();
        }
    }

Несколько дополнительных замечаний, которые могут быть полезны: Мой набор данных является статическим.Если нет, данные будут потеряны, когда произойдет обратная запись.

public static DataTable dtTelephoneNumbers = new DataTable();

И все происходит внутри UpdatePanel, который находится внутри Wizard Step.

ОБНОВЛЕНИЕ 1: Данные только локальные (пока).Я собираю всю информацию от пользователя с помощью мастера и, наконец, добавляю ее в базу данных.

ОБНОВЛЕНИЕ 2: Работает просто отлично, когда используется без UpdatePanel.:( Похоже, UpdatePanel как-то связана с этим!

Ответы [ 2 ]

0 голосов
/ 14 ноября 2010

Единственный способ справиться с ситуацией - это удалить UpdatePanel из кода, и он отлично работал с полным постом на обратной стороне страницы!

0 голосов
/ 10 ноября 2010

Вам не нужно фиксировать изменения в DataTable с помощью dtTelephoneNUmbers.AcceptChanges()

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