簡體   English   中英

使用Linq分析Gridview

[英]Paging a Gridview with Linq

所以我有一個清單: -

static List<ListOfEmployees> employees = new List<ListOfEmployees> 
{ 
   new ListOfEmployees {Name = "John Doe", Address = "123 Test Ave S, Eugene, OR", Phone = "541-123-2345", DateOfHire = Convert.ToDateTime("2/23/2013")},
   new ListOfEmployees {Name = "Billy Rodney", Address = "551E 44th Ave, Eugene, OR", Phone = "541-123-1234", DateOfHire = Convert.ToDateTime("1/2/2014")},
   new ListOfEmployees {Name = "Arne Riise", Address = "99W Hwy21, Eugene, OR", Phone = "541-123-4466", DateOfHire = Convert.ToDateTime("6/11/2014")},
   new ListOfEmployees {Name = "Mike Duty", Address = "1450 Hilyard Lane, Eugene, OR", Phone = "541-123-9987", DateOfHire = Convert.ToDateTime("11/21/2014")},
   new ListOfEmployees {Name = "Nigel Poppet", Address = "771 Fox Run, Eugene, OR", Phone = "541-123-6655", DateOfHire = Convert.ToDateTime("5/9/2013")},
   new ListOfEmployees {Name = "Shawn Dot", Address = "1220 Ferry St, Eugene, OR", Phone = "541-123-3345", DateOfHire = Convert.ToDateTime("8/15/2014")},
   new ListOfEmployees {Name = "Man Child", Address = "PO Box #221, Eugene, OR", Phone = "541-123-9987", DateOfHire = Convert.ToDateTime("12/23/2014")},
   new ListOfEmployees {Name = "Mike Duty", Address = "1450 Hilyard Lane, Eugene, OR", Phone = "541-123-9987", DateOfHire = Convert.ToDateTime("11/21/2014")},
   new ListOfEmployees {Name = "Nigel Poppet", Address = "771 Fox Run, Eugene, OR", Phone = "541-123-6655", DateOfHire = Convert.ToDateTime("5/9/2013")},
   new ListOfEmployees {Name = "Shawn Dot", Address = "1220 Ferry St, Eugene, OR", Phone = "541-123-3345", DateOfHire = Convert.ToDateTime("8/15/2014")},
   new ListOfEmployees {Name = "Man Child", Address = "PO Box #221, Eugene, OR", Phone = "541-123-9987", DateOfHire = Convert.ToDateTime("12/23/2014")}
};

它屬於ListOfEmployee類。

我正在學習linq並實現了一個簡單的linq查詢: -

private IEnumerable<ListOfEmployees> returnEmployees(DateTime userInputLimit, int rowIndex)
{
    var Employees =
    from e in employees
    where e.DateOfHire < userInputLimit
    select e;

    createEmployeesDataTable(Employees);

    // Paginate //
    Employees = Employees.Take(11).Skip(rowIndex);

    return Employees.ToList();
}

返回的結果綁定到我的aspx Gridview: -

private void submitQuery(int rowIndex)
{
    DateTime userInputLimit = Convert.ToDateTime(txtboxHireDate.Text);
    var Employees = returnEmployees(userInputLimit, rowIndex);
    gvw_Linq_Results.DataSource = Employees;

    gvw_Linq_Results.DataBind();
}

綁定后,我正在為Gridview實現Paging: -

protected void gvw_Linq_Results_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    int pageIndex = e.NewPageIndex;
    gvw_Linq_Results.PageIndex = pageIndex;
    submitQuery(pageIndex*gvw_Linq_Results.PageSize);
}

問題是,假設我有11名員工,我的gridview maxPageSize = 5.我立即在我的UI上顯示3個頁面索引。 現在當我點擊第二頁時,我的UI顯示正確顯示第二頁的結果,但在顯示中,第一頁丟失,第二頁顯示為第一頁,第三頁顯示為第二頁。

或者,如果我立即點擊第3頁,那么我的第1頁和第2頁都會從UI顯示中丟失,我只得到1行1個網格頁面(因為11記錄 - 2頁* 5記錄/頁)。

我不熟悉linq和跳過/采取技術,並想知道是否有人可以幫我解決這個問題。

看起來對我有用的解決方案是: -

    // Paginate //
    Employees = Employees.Take(11).Skip(0);

更改我的跳過以返回到第0行rowIndex。 我想我以前的理解是跳過實際上是照顧分頁的...我仍然不確定它,但這解決了我的問題。

出現此問題是因為您沒有存儲當前索引。 您的解決方案取決於您正在使用的方案。

  • 基於Web的環境:我會要求您將當前頁面索引存儲在會話狀態變量中,或將其作為查詢參數傳遞。 在您的代碼中,您可以通過檢索值來發送結果。

  • 表單或存儲應用程序:最好在后面的代碼中創建一個全局變量,以存儲LINQ查詢的結果。 將值存儲在全局變量中將確保您不需要反復迭代。 然后,您可以根據用戶的查詢獲取整個結果的子部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM