2010-11-10 9 views
0

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

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

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

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(); 
     } 
    } 

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

public static DataTable dtTelephoneNumbers = new DataTable(); 

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

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

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

+1

Удержание DataTable как статического члена - страшная идея, и только один человек сможет использовать страницу за раз. Храните данные в viewstate или сеанс пользователя. – batwad

+0

Thanx много batwad для советов :) Я должен был обязательно подумать об этом раньше !!! : O –

ответ

0

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

0

Не нужно совершать изменения в DataTable с dtTelephoneNUmbers.AcceptChanges()

+0

Пробовал это только сейчас, все равно он не работает :(Thanx много для усилий. –