LINQ를 사용하여 IQueryable 데이터를 사용자 계층의 GridView로 반환하는 비즈니스 계층 클래스가 있습니다. 나는 그것이 단지 한 페이지의 데이터 만 반환하기를 원한다. 그러나 전체 쿼리를 반환하고 있습니다. 페이징이 제대로 작동한다고 들었지만, 모든 페이지가 돌아 오면 수백 또는 수천 개의 행을 가져오고 페이지 크기로 설정된 행을 제외하고 모두 버립니다. 여기 IQueryable에 연결된 Gridview LINQ 쿼리가 단일 페이지 대신 전체 쿼리를 반환합니다.
<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를로드하는 코드입니다 : 여기
는 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입니다
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();
}
내가있는 gridview가 자기의 모든 페이징 처리하도록 설정 될 수 있다고 생각? –
@ 닉 그것은 할 수 있지만 당신은 그냥 필터링 할 원시 목록에 연결할 수 없다고 생각합니다 (내가 틀릴 수도). – Kelsey
@ Kelsey의 .Skip/.Take 방식을 사용하려면 모든 쿼리에 PageSize 및 CurrentPage를 추가해야합니다. @ 닉 & 내가 용의자로, Linq이 알아낼 정도로 똑똑하다면, 어떻게 배우고 싶습니다. –