0

有趣,我覺得有點棘手,但嘿,我確定有人在那裏面對並找到了解決問題的方法。我的記錄將放在哪個頁面上?

反正,要求很簡單,但解決方案不是。

我用EF數據源使用標準的ASP.Net Listview控件。我在我的列表視圖中加載記錄,因此使用Asp.Net Pager。我使用搜索按鈕在我的頁面上放置了一個文本框,我希望能夠跳轉到搜索框中指定的記錄所在的頁面。我的案例中的記錄是我的EF Modal中的一個屬性。下面的代碼我用我的網頁

protected void JumptoRecordPostToServer_Click(object sender, EventArgs e) 
{ 
    int pagenrofjumptorecord = InspectionsBusinessObject.GetPageNumberforJumptoRecord(currentusername.Value, pid, DataPager1.PageSize, recordtoFind, Common.Util.GetUserRole()); 
    this.Response.Redirect(string.Format("/foo.aspx?SelectedPage=", pagenrofjumptorecord.ToString()));    
} 

的GetPageNumberforJumptoRecord方法上有幾個參數不是真的對這個問題相關的,但在這裏是該方法

public static int GetPageNumberforJumptoRecord(string UserName,Guid ProjectID,int ItemsPerPage,int SiteNumber,UserRoles CurrentRole) 
{ 
    using (MyEFEntity context = new MyEFEntity()) 
    { 
     try 
     { 
      //allsites = integer 
      int[] allsites = context.INSPECTIONS.Where(z => z.ProjectID.Equals(ProjectID)).Select(z => z.HouseSiteNo).ToArray(); 

      Array.Sort(allsites);     

      int sitetoSearchforIndex = Array.IndexOf(allsites, SiteNumber); 

      int totalNrofItems = allsites.Length; 

      if (sitetoSearchforIndex != -1) 
      { 
       int nrofPages = totalNrofItems/ItemsPerPage; // <------- I guess my alghorithm here is wrong 
       return (sitetoSearchforIndex * nrofPages)/totalNrofItems; // <------- I guess my alghorithm here is wrong 
      } 
     } 
     catch {} 
     return -1; 
    } 
} 
+0

您是否期望第一頁成爲第1頁或第0頁? – mafue 2012-07-26 20:22:59

回答

0

我不代碼認爲你需要計算的頁(nrofPages)的總數,這已經足夠了:

int selectedPage = GetPage(sitetoSearchforIndex, ItemsPerPage, false); 

public int GetPage(int indexOfItem, int itemsPerPage, bool startAtPageZero) 
{ 
    int selectedPage = indexOfItem/itemsPerPage;  
    return startAtPageZero ? selectedPage : ++selectedPage; 
} 

測試:

bool sapz = false; // pages start at 1 
GetPage(0, 10, sapz).Dump(); // 1st item - Page 1 
GetPage(9, 10, sapz).Dump(); // 10th  - Page 1 
GetPage(10, 10, sapz).Dump(); // 11th  - Page 2 
GetPage(14, 10, sapz).Dump(); // 15th  - Page 2 
GetPage(99, 10, sapz).Dump(); // 100th - Page 10 
GetPage(100, 10, sapz).Dump(); // 101st - Page 11 
+0

嗨,我認爲這會奏效,我會在測試時通知您。 TX – Fox 2012-07-29 13:22:07

相關問題