0

私は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' には使用できません

グリッド ビューでページングを無効にすると、このエラーは消えます。

なぜこれが起こっているのか分かりますか?

どんな助けにも感謝します。

4

1 に答える 1

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 も処理する必要があります。

于 2011-10-18T12:50:38.840 に答える