将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设置为pagesize 20(并正确显示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操作吗?
答案 0 :(得分: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查询进行编译检查
答案 1 :(得分:0)
我不确定,但你能使用LinqDataSource吗?否则,我认为GridView要求数据在DataSet中,以便它自己进行分页和排序。
答案 2 :(得分:0)
的IEnumerable< T> GridView控件不支持排序和分页。但是你可以使用List< T>。只需.ToList()你的结果集。
grid_PageIndexChanging(object sender, GridViewPageEventArgs e) {
this.grid.PageIndex = e.NewPageIndex;
this.grid.DataSource = this.DataSource;
this.grid.DataBind();
}