2009-03-11 13 views
2

linq2sqlコレクションをGridViewにバインドする最良の方法は何ですか?私は組み込みのページネーションとソートを使用したいのですが?Linq2sql/GridView:ページネーションが機能していませんか?

public static void BindEnquiryList(EnquiryQuery query, GridView view) 
     { 
      DataContext db = DataContextManager.Context 
      //view.DataSource = (from e in EnquiryMethods.BuildQuery(query) 
      view.DataSource = (from e in db.Enquiries 
           select new 
           { 
            Id = e.Id, 
            Name = e.Name, 
            PublicId = EnquiryMethods.GetPublicId(e.PublicId), 
            What = e.WorkType.DescriptionText, 
            Where = e.EnquiryArea.DescriptionText, 
            Who = e.EnquiryType0.DescriptionText, 
            When = e.EnquiryTime0.DescriptionText, 
            PriceRange = e.EnquiryPrice0.DescriptionText, 
            DisplayPriceRange = e.EnquiryPrice0.Display, 
            Description = e.Description, 
            Published = e.EnquiryPublished 
           }); 

      view.DataBind(); 
     } 

をそして、GridViewコントロールは、20をPAGESIZEするように設定されている(かつ適切に20を示している)が、実行には、ロードするために永遠にかかり、私は、SQLのログイン時に私が手::

私が試した

SELECT [t0].[Id], [t0].[Name], [t0].[PublicId] AS [publicId], [t1].[DescriptionText] AS [What], [t2].[DescriptionText] AS [Where], [t3].[DescriptionText] AS [Who], [t4].[DescriptionText] AS [When], [t5].[DescriptionText] AS [PriceRange], [t5].[Display] AS [DisplayPriceRange], [t0].[Description], [t0].[EnquiryPublished] AS [Published] 
FROM [dbo].[Enquirys] AS [t0] 
LEFT OUTER JOIN [dbo].[WorkTypes] AS [t1] ON [t1].[Id] = [t0].[EnquiryPlace] 
LEFT OUTER JOIN [dbo].[EnquiryAreas] AS [t2] ON [t2].[Id] = [t0].[EnquiryPlace] 
LEFT OUTER JOIN [dbo].[EnquiryTypes] AS [t3] ON [t3].[Id] = [t0].[EnquiryType] 
LEFT OUTER JOIN [dbo].[EnquiryTimes] AS [t4] ON [t4].[Id] = [t0].[EnquiryTime] 
LEFT OUTER JOIN [dbo].[EnquiryPrices] AS [t5] ON [t5].[Id] = [t0].[EnquiryPrice] 
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.21022.8 

トップがありません。私は、GridViewがTakeとSkipの操作を管理することを期待していましたか?

答えて

2

最も良い方法は、LinqDataSourceを使用することです。 LinqDataSourceでイベントを選択するためのイベントハンドラを作成します。

protected void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e) 
{ 
    e.Result = (from e in db.Enquiries 
           select new 
           { 
            Id = e.Id, 
            Name = e.Name, 
            PublicId = EnquiryMethods.GetPublicId(e.PublicId), 
            What = e.WorkType.DescriptionText, 
            Where = e.EnquiryArea.DescriptionText, 
            Who = e.EnquiryType0.DescriptionText, 
            When = e.EnquiryTime0.DescriptionText, 
            PriceRange = e.EnquiryPrice0.DescriptionText, 
            DisplayPriceRange = e.EnquiryPrice0.Display, 
            Description = e.Description, 
            Published = e.EnquiryPublished 
           }); 

} 

その後LinqDataSourceコントロールは、ページングを処理し、あなたのために並べ替えて、あなたはあなたにチェックをコンパイル取得クエリ

をLINQます
0

わかりませんが、LinqDataSourceを使用できますか?それ以外の場合は、GridViewはデータをDataSetに入れて、ページングとソートを独自に実行する必要があります。

0

IEnumerable <T>は、GridView Controlによる並べ替えとページングには対応していません。しかし、リスト<T>を使い続けることができます。 .ToList()の結果セット。

grid_PageIndexChanging(object sender, GridViewPageEventArgs e) { 
     this.grid.PageIndex = e.NewPageIndex; 
     this.grid.DataSource = this.DataSource; 
     this.grid.DataBind(); 
    } 
関連する問題