興味深いし、少しトリッキーだと思いますが、誰かが直面して問題の修正を見つけたと確信しています.
とにかく、要件は十分に単純ですが、解決策はそうではありません。
私は標準の ASP.Net Listview コントロールを EF データソースで使用しています。リストビューに大量のレコードがあるため、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;
}
}