【问题标题】:asp.net gridview paging and sorting with linq to sql custom linq statement使用 linq to sql 自定义 linq 语句的 asp.net gridview 分页和排序
【发布时间】:2011-04-14 20:52:22
【问题描述】:

好的,我知道这真的很难,但我很难找到任何信息。我在页面上有一个网格视图,我正在根据用户选择的日期范围(下拉列表)填充数据。当用户单击按钮时,我填充 gridview 并显示它。这一切都是使用 Linq to Sql 完成的。我还需要实现分页和排序。请帮忙!!!以下是我的按钮点击事件...我愿意接受任何建议以使其正常工作

protected void btnGenerate_Click(object sender, EventArgs e)
     {
         int dateRange =0;
         if (rbDateList.Checked)
         {
             switch (ddlDateRange.SelectedIndex)
             {
                 case 0:
                     dateRange = 30;
                     break;
                 case 1:
                     dateRange = 60;
                     break;
                 case 2:
                     dateRange = 90;
                     break;
                 default:
                     dateRange = 30;
                     break;
             }
         }
         GYTDataContext gt = new GYTDataContext();
         var productList = from o in gt.PurchaseOrderDetails
                           join p in gt.Products on o.ProductId equals p.ProductId
                           join h in gt.PurchaseOrderHeaders on o.PurchaseOrderId equals h.PurchaseOrderId
                           where h.OrderDate>DateTime.Now.AddDays(-dateRange)
                           group o by o.ProductId into orderedItems
                           select new
                           {
                               orderedItems.Key,
                               QuantityOrdered = orderedItems.Sum(s => s.OrderQuantity)
                           };
         var totalOrderInfo = from p in productList
                              join prod in gt.Products
                              on p.Key equals prod.ProductId
                              select new
                              {
                                  prod.Reference,
                                  UnitPrice = prod.Price,
                                  prod.ManufacturerProductId,
                                  p.QuantityOrdered,
                                  TotalCost = prod.Price * Convert.ToInt32(p.QuantityOrdered)
                              };

        gvOrderReport.DataSource = totalOrderInfo;
         gvOrderReport.DataBind();
         gvOrderReport.Visible = true;

【问题讨论】:

    标签: c# asp.net linq-to-sql gridview


    【解决方案1】:

    我和你有同样的问题。 linqdatasource 的大多数示例,ilustare WhereParameters > controlparameter 功能很酷但不是那么强大。

    答案很简单: 使用 LinqDataSource 并只需实现“onselecting”事件即可传递您想要的任何类型的数据。

    这是一个完整的过滤-分页-排序功能的简短示例 (还要注意填充的 sql 是最优的,每次只请求前 10 条记录)

    ASPX:

    <asp:TextBox ID="txtLastName" runat="server"></asp:TextBox>
    <asp:Button ID="btnFilter" runat="server" Text="Filter" 
        onclick="btnFilter_Click"/>
    
    <asp:LinqDataSource ID="LinqDataSource1" runat="server" 
        onselecting="LinqDataSource1_Selecting">
    </asp:LinqDataSource>
    
    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
        AllowSorting="True" AutoGenerateColumns="False" DataSourceID="LinqDataSource1">
        <Columns>
            <asp:BoundField DataField="FirstName" HeaderText="FirstName" ReadOnly="True" 
                SortExpression="FirstName" />
            <asp:BoundField DataField="MiddleName" HeaderText="MiddleName" ReadOnly="True" 
                SortExpression="MiddleName" />
            <asp:BoundField DataField="LastName" HeaderText="LastName" ReadOnly="True" 
                SortExpression="LastName" />
        </Columns>
    </asp:GridView>
    

    代码隐藏:

        protected void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e)
        {
            var ctx = new LinqDataSource.DBDataContext();
            IQueryable<Customer> customers = ctx.Customers;
    
            if (!String.IsNullOrEmpty(txtLastName.Text))
                customers = customers.Where ( c => c.LastName.Contains(txtLastName.Text));
    
            e.Result = customers;
        }
    
        protected void btnFilter_Click(object sender, EventArgs e)
        {
            GridView1.DataBind();
        }
    

    【讨论】:

      【解决方案2】:

      既然您使用带有GYTDataContext 的LINQ-to-SQL,为什么不使用LinqDataSource 来填充您的Gridview?

      LinqDataSource 可以自动处理分页和排序。

      http://msdn.microsoft.com/en-us/library/bb547113.aspx

      【讨论】:

      • 我在使用任一数据源(linqdatasource 或 objectdatasource)时遇到了两个问题。问题 1 是我如何创建像我这样用于数据源的查询,也许有一个更短或更直接的方法来解决我想要做的事情。问题二是如何处理点击事件
      猜你喜欢
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 1970-01-01
      • 2015-11-03
      • 1970-01-01
      • 2013-09-24
      相关资源
      最近更新 更多