2010-11-10 99 views
0

我有一個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中得到了一些與此有關!

+1

將DataTable作爲一個靜態成員是一個可怕的想法;一次只能有一個人可以使用該頁面,將數據保持在視圖狀態或用戶的會話,而不是。 – batwad 2010-11-10 09:10:45

+0

Thanx很多batwad的建議:)我應該肯定考慮過之前! :O – 2010-11-10 09:18:43

回答

0

提交更改到DataTable我可以處理這種情況的唯一方法是刪除的UpdatePanel從代碼和它工作得很好,在頁面的完整後發佈!

0

你不需要用 dtTelephoneNUmbers.AcceptChanges()

+0

剛剛嘗試過它,但它仍然不起作用:(非常感謝。 – 2010-11-10 08:58:04