有趣并且我觉得有点棘手,但是,嘿,我相信那里的某个人已经面临并找到了解决问题的方法。
无论如何,要求很简单,但解决方案不是。
我正在使用带有EF数据源的标准ASP.Net Listview控件。我的listview中有大量记录,因此使用Asp.Net寻呼机。我已经在我的页面上放置了一个带有搜索按钮的文本框,我希望能够跳转到搜索框中指定的记录所在的页面。我的案例中的记录是我的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 :(得分: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