2009-09-29 87 views
1

我有一個可以刪除行的datagrid(使用ajax)。我在以下情況下遇到了尋呼機問題:ASP.NET:在刪除行時刪除

可以說我的PageSize是10,我有101行,因此這是11頁,最後一頁帶有一個元素。不要假定我在第10頁(PageIndex = 9)並刪除一行。然後我進入第11頁(誰現在是空的,並不存在)。 ASP現在向我顯示EmptyDataTemplate並且沒有傳呼機,所以我不能回去。

我的做法(這是不工作)是檢測這種情況下,並一步一個頁面回:

public void Bind() 
{ 
    gridMain.DataBind(); 
} 

public void SetPage(int page) 
{ 
    gridMain.PageIndex = page; 
    gridMain.DataBind(); 
} 

protected void ldsGridMain_Selecting(object sender, LinqDataSourceSelectEventArgs e) 
{ 
    selectArgs = e; 
    e.Result = (new EnquiryListController()).GetEnquiryList(OnBind(this), supplier); 
} 

protected void ldsGridMain_Selected(object sender, LinqDataSourceStatusEventArgs e) 
{ 
    totalRows = selectArgs.Arguments.TotalRowCount; 

    //Detect if we need to update the page: 
    if (gridMain.PageIndex > 0 && (gridMain.PageSize * gridMain.PageIndex + 1) > totalRows) SetPage(gridMain.PageIndex - 1); 
} 

protected void gridMain_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    SetPage(e.NewPageIndex);  
} 

我可以看到SetPage時調用正確的頁面索引,但沒有按數據綁定」因爲我仍然獲得了EmptyDataTemplate,所以似乎沒有調用。

回答

3

當您刪除該項目時,您需要重新綁定數據,以便傳呼機調整大小。
不只是調用數據綁定,您必須重置數據源並調用數據綁定。它不保留後期之間數據源中的數據。

在執行此操作之前,請確保將pageIndex重置爲新集合上的作用域。

+0

我不能像使用ajax「移除」元素。 – 2009-09-30 06:28:47

+0

asp.net內置的控件和ajax並不總是很好玩,你可能不得不使用我最絕望的東西,一個更新面板,來拉扯兩個世界的最佳。 你也可以使用jqGrid或其他一些客戶端分頁網格,並把它們全部放在一起構建的asp.net中。 – DevelopingChris 2009-10-03 03:03:39

0

SetPage(gridMain.PageIndex - 1)可能不正確。你必須計算當前行數的最後一頁是什麼。當前PageIndex-1可能超出範圍。

+0

以及我沒有得到任何的異常,所以我不認爲這是它。 – 2009-09-29 12:43:18

+0

沒有收到異常並不意味着您已經測試了所有場景。當PageIndex-1超出範圍時,我剛剛發現此代碼可能導致異常。此外,PageSize * PageIndex + 1也可能不正確: PageSize = 10,PageIndex = 2(第3頁),10 * 2 + 1 = 21,而不是您期待的30。 – 2009-09-29 13:15:18

+0

PageSize * PageIndex + 1實際上是我想要的,因爲我想與totalRows進行比較。如果PageSize * PageIndex + 1大於totalRows我知道我有一個沒有任何行的頁面。並且需要返回一頁(最多隻能有一頁需要退後一步,因爲最後一頁上最多隻有一個元素才能存在)。問題出在最後一個DataBind()中,沒有anty的效果。 – 2009-09-30 06:27:49

0

將SetPage中的網格與更新的數據源重新綁定並設置pageindex。檢查RecordCount/PageSize是否小於pager中的NumberofPages或當前頁面索引,然後根據RecordCount/PageSize減小頁面索引。

0

你就不能使用這樣的:

public void SetPage(int page) 
{ 
    gridMain.PageIndex = Math.Max(page, gridMain.PageCount); 
    gridMain.DataBind(); 
}