2011-05-02 27 views
0

我正在開發一個Sharepoint 2010可視化webpart,我試圖在其中使用LinqDataSource來處理GridView中的分頁和排序。 我用spmerical製作了我的datacontext和實體對象。現在這是我的代碼:LinqDataSource與linq共享點分頁

我的標記:

<%@ 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'

當我停用在網格視圖上進行分頁時,此錯誤消失。

你知道爲什麼會發生這種情況嗎?

我會很感激任何幫助。

回答

3

對我來說,下面的解決幫助:

LinqDataSource1.AutoPage = false; 
LinqDataSource1.AutoSort = false; 

在MySelecting:

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。