У меня есть данные ретранслятора 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 получил что-то делать с этим!
Удержание DataTable как статического члена - страшная идея, и только один человек сможет использовать страницу за раз. Храните данные в viewstate или сеанс пользователя. – batwad
Thanx много batwad для советов :) Я должен был обязательно подумать об этом раньше !!! : O –