我有一个简单的页面,使用带有Linq编写的单个方法的webservice查找联系人。在页面上,我有一个gridview和一个带有DataPager的listview来比较这两者。我可以使用gridview使分页工作正常,但Linq代码必须返回每次调用的所有数据,并让网页只选择一个页面的价值......不是最好的解决方案。
我被告知ListView将解决这个问题,但我能找到的所有示例都在网页上有Linq代码,而不是在单独的层(例如web服务)中。理想情况下,我应该能够告诉Web服务带回一个特定页面的数据(开始记录号和行数),但是如何让ListView(或DataPager)触发一个要求这个的事件数据?
这是ASPX代码:
<asp:ListView ID="listPersons" runat="server">
<LayoutTemplate>
<table>
<thead>
<tr>
<th>
Site ID
</th>
<th>
PersonID
</th>
<th>
Person Name
</th>
</thead>
<tbody>
<asp:PlaceHolder ID="itemPlaceholder" runat="server" />
</tbody>
</table>
<asp:DataPager ID="Pager1" runat="server" PagedControlID="listPersons" PageSize="5" >
<Fields>
<asp:NextPreviousPagerField ShowFirstPageButton="true" ShowPreviousPageButton="true"
ShowNextPageButton="false" ShowLastPageButton="false" />
<asp:NumericPagerField />
<asp:NextPreviousPagerField ShowFirstPageButton="false" ShowPreviousPageButton="false"
ShowNextPageButton="true" ShowLastPageButton="true" />
</Fields>
</asp:DataPager>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td>
<%# Eval("SiteID") %>
</td>
<td>
<%# Eval("PersonID") %>
</td>
<td>
<%# Eval("PersonName") %>
</td>
</tr>
</ItemTemplate>
<EmptyDataTemplate>
No data found...
</EmptyDataTemplate>
</asp:ListView>
这是背后的代码:
private void DoList(string Match)
{
ContactsService cs = new ContactsService();
listPersons.DataSource = cs.Find(Match, 100 );
listPersons.DataBind();
}
和网络服务:
[WebMethod]
public List<Person>Find(string Match, int Count)
{
if (Count < 5) Count = 5;
using (DataLayer.ContactsDataContext context = new ContactsDataContext())
{
var Persons =
from p in context.Persons
where p.PersonName.Contains(Match)
orderby p.LastName, p.FirstName
select new Person()
{
SiteID = p.SiteID,
PersonID = p.PersonID,
PersonName = p.PersonName,
};
return Persons.Take(Count).ToList();
}
}
答案 0 :(得分:0)
这里不是100%肯定答案。在运行时绑定DataSource时使用DataPager会增加很多工作,但我认为可以完成。
或者考虑使用LinqDataSource并连接OnSelecting事件或使用ObjectDataSource。不确定DataPager如何与ODS一起使用(如果有的话)。 LinqDataSource或ObjectDataSource需要使用DataSourceID与ListView相关联。
如果必须使用DataSource进行绑定,则可以将ListView上的OnPagePropertiesChanging事件与DataPager上的PageSize和StartRowIndex属性连接起来。您需要在控制树中搜索DataPager,因为它可能包含在模板中。