0

DataTable にバインドされた ASP .NET Repeater データがあります。DataTable & に行を追加するBind()と、Repeater は新しくバインドされたデータを適切に表示し、DataTable から削除しBind()、Repeater はデータを削除します。

ただし、行が削除されると、DataTable から完全に削除されたにもかかわらず、最後の行が Web ページに表示されるという奇妙な問題が存在します。まるで最後の行のように、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 内にある a 内で発生UpdatePanelWizard Stepます。

更新 1:データはローカルのみです (今のところ)。ウィザードを使用してユーザーからすべての情報を収集し、最終的にデータベースに追加します。

更新 2: UpdatePanel なしで使用すると問題なく動作します。:( UpdatePanel がこれと関係があるようです!

4

2 に答える 2

0

この状況に対処できる唯一の方法は、コードから UpdatePanel を削除することでした。ページの完全なポストバックで問題なく機能しました。

于 2010-11-14T04:41:03.697 に答える
0

でDataTableへの変更をコミットする必要はありませんか dtTelephoneNUmbers.AcceptChanges()

于 2010-11-10T08:54:05.093 に答える