У меня есть данные ASP .NET Repeater, привязанные к DataTable. Все работает нормально, когда я могу добавить строки в DataTable и Bind()
, и Repeater изящно покажет новые связанные данные и удалит их из DataTable и Bind()
, а Repeater удалит данные.
Однако существует странная проблема, когда при удалении строк последняя стоящая строка, хотя и полностью удаленная из DataTable, все равно будет отображаться на веб-странице. Как будто для последней строки Repeater не привязан к данным! Но я поставил точки останова и проанализировал, что элемент определенно удаляется из 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();
}
}
Несколько дополнительных замечаний, которые могут быть полезны: Моя таблица данных является статической таблицей данных. В противном случае данные будут потеряны, когда произойдет обратная отправка.
public static DataTable dtTelephoneNumbers = new DataTable();
И все происходит внутри UpdatePanel
, который находится внутри Wizard Step
.
ОБНОВЛЕНИЕ 1: данные только локальные (на данный момент). Я собираю всю информацию от пользователя с помощью мастера и, наконец, добавляю ее в базу данных.
ОБНОВЛЕНИЕ 2: отлично работает при использовании без UpdatePanel. :( Похоже, что UpdatePanel как-то связан с этим!