我有一個ASP .NET Repeater數據綁定到DataTable。一切正常,我可以將行添加到DataTable & Bind()
並且Repeater將優雅地顯示新綁定的數據並從DataTable和Bind()
中刪除,並且Repeater將刪除數據。爲什麼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
內內。
UPDATE 1:該數據僅供本地使用(現在)。我使用嚮導收集用戶的所有信息,最後將其添加到數據庫中。
UPDATE 2: 在沒有UpdatePanel的情況下使用時效果很好。 :(看起來像UpdatePanel中得到了一些與此有關!
將DataTable作爲一個靜態成員是一個可怕的想法;一次只能有一個人可以使用該頁面,將數據保持在視圖狀態或用戶的會話,而不是。 – batwad 2010-11-10 09:10:45
Thanx很多batwad的建議:)我應該肯定考慮過之前! :O – 2010-11-10 09:18:43