0

興味深いし、少しトリッキーだと思いますが、誰かが直面して問題の修正を見つけたと確信しています.

とにかく、要件は十分に単純ですが、解決策はそうではありません。

私は標準の 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;
    }
}
4

1 に答える 1

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
于 2012-07-26T20:50:43.547 に答える