我正在开发一个 Sharepoint 2010 可视化 Web 部件,并尝试在其中使用 LinqDataSource 来处理 GridView 中的分页和排序。 我用 spmetal 制作了数据上下文和实体对象。现在这是我的代码:
我的标记:
<%@ Register TagPrefix="asp" Namespace="System.Web.UI.WebControls" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<asp:LinqDataSource runat="server" ID="LinqDataSource1" OnSelecting="MySelecting" />
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" PageSize="3"
AutoGenerateColumns="False" DataSourceID="LinqDataSource1"
EnableModelValidation="True">
<Columns>
<asp:BoundField DataField="title" HeaderText="Title" />
</Columns>
</asp:GridView>
和我的代码:
protected void MySelecting(object sender, LinqDataSourceSelectEventArgs e)
{
TestEntitiesDataContext dc = new TestEntitiesDataContext("http://sp/sites/test");
e.Result = from item in dc.TestList
select new
{
title = item.Title,
numberField = item.NumberField.ToString()
};
}
现在的问题是,当我尝试查看网站上的 Web 部件时,出现此错误: “System.Int32”类型的表达式不能用于返回类型“System.Object”
当我停用网格视图上的分页时,此错误就会消失。
你知道为什么会发生这种情况吗?
如有任何帮助,我将不胜感激。
对我来说,以下解决方法有帮助:
LinqDataSource1.AutoPage = false;
LinqDataSource1.AutoSort = false;
在我的选择中:
e.Result = [your nice LINQ expression].Skip(e.Arguments.StartRowIndex).Take(e.Arguments.MaximumRows);
e.Arguments.TotalRowCount = [your nice LINQ expression].Count();
如果需要排序,还应该处理 e.Arguments.SortExpression。