У меня есть класс бизнес-уровня, который использует LINQ для возврата данных IQueryable в GridView на пользовательском уровне. Я хочу, чтобы он возвращал только одну страницу данных; однако он возвращает весь запрос. Я слышал, что подкачка должна работать, но каждый поворот страницы возвращает сотни или тысячи строк и выбрасывает все, кроме строк, заданных в размере страницы.
Вот запрос LINQ (немного отредактированный)
public IQueryable<ScoredMatch> List()
{
var dc = new PAQcDataLayerDataContext();
var matches = (
from m in dc.ScoredRecordMatches
join c in dc.Customers on m.CustomerId equals c.CustomerId
orderby m.PAQNumber
select new ScoredMatch()
{
Id = m.Id,
PAQId = (int)m.PAQId,
PAQVersion = (int)m.PAQVersion,
JobTitleMatch = (bool)m.JobTitleMatch,
OrgNameMatch = (bool)m.OrgNameMatch,
IncumbentNameMatch = (bool)m.IncumbentNameMatch,
});
return matches;
}
А вот и GridView:
<asp:GridView ID="grdMatches" runat="server" AutoGenerateColumns="false" CssClass="gridview"
AlternatingRowStyle-CssClass="even" AllowPaging="true" AllowSorting="true" PageSize="10"
DataKeyNames="Id" OnPageIndexChanging="grdMatches_PageIndexChanging" OnSorting="grdMatches_Sorting"
AutoGenerateSelectButton="True" OnSelectedIndexChanging="grdMatches_SelectedIndexChanging">
<Columns>
<asp:BoundField DataField="PAQNumber" HeaderText="PAQ #" SortExpression="PAQNumber" />
<asp:BoundField DataField="ScoredNumber" HeaderText="Score #" SortExpression="ScoredNumber" />
<asp:BoundField DataField="CustomerId" HeaderText="Cust #" SortExpression="CustomerId" />
<asp:BoundField DataField="Customer" HeaderText="Customer" SortExpression="Customer" />
<asp:BoundField DataField="Department" HeaderText="Department" SortExpression="Department" />
<asp:BoundField DataField="DOTNumber" HeaderText="DOT #" SortExpression="DOTNumber" />
<asp:CheckBoxField DataField="OrgNameMatch" HeaderText="Org Match" />
<asp:CheckBoxField DataField="JobTitleMatch" HeaderText="Job Match" />
<asp:CheckBoxField DataField="IncumbentNameMatch" HeaderText="Inc Match" />
</Columns>
</asp:GridView>
Вот код, который загружает Gridview:
grdMatches.DataSource = new ScoredMatch().List();
grdMatches.DataBind();
И код, который делает пейджинг:
protected void grdMatches_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
grdMatches.DataSource = new ScoredMatch().List();
grdMatches.PageIndex = e.NewPageIndex;
grdMatches.DataBind();
}