0

我有一个绑定到 DataTable 的 ASP .NET 中继器数据。一切正常,我可以向 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();

一切都发生在 a UpdatePanelwhich is inside a 内Wizard Step

更新 1:数据仅是本地的(目前)。我使用向导从用户那里收集所有信息,最后将其添加到数据库中。

更新 2: 在没有更新面板的情况下工作得很好。:( 看起来 UpdatePanel 与此有关!

4

2 回答 2

0

您是否需要提交对 DataTable 的更改 dtTelephoneNUmbers.AcceptChanges()

于 2010-11-10T08:54:05.093 回答
0

我可以处理这种情况的唯一方法是从代码中删除 UpdatePanel 并且它在页面的完整帖子后面工作得很好!

于 2010-11-14T04:41:03.697 回答