【问题标题】:Linq2sql/GridView: Pagination not working?Linq2sql/GridView:分页不起作用?
【发布时间】:2010-10-12 16:31:22
【问题描述】:

考虑到我不想使用内置分页和排序,将 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 操作?

【问题讨论】:

    标签: c# sql-server linq-to-sql tsql


    【解决方案1】:

    最好的方法是使用 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 查询进行编译检查

    【讨论】:

      【解决方案2】:

      我不确定,但你可以使用 LinqDataSource 吗?否则,我认为 GridView 要求数据位于 DataSet 中,以便它自己进行分页和排序。

      【讨论】:

        【解决方案3】:
        GridView 控件不支持

        IEnumerable 进行排序和分页。但是您当然可以使用 List。只需 .ToList() 你的结果集。

        grid_PageIndexChanging(object sender, GridViewPageEventArgs e) {
                this.grid.PageIndex = e.NewPageIndex;
                this.grid.DataSource = this.DataSource;
                this.grid.DataBind();
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多