c# - asp.net gridview 分页和排序与 linq to sql 自定义 linq 语句

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

好吧,我知道这真的没有那么难,但我找不到任何信息。我在页面上有一个 gridview,我正在根据用户选择的日期范围(下拉列表)填充数据。当用户单击按钮时,我填充 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;

最佳答案

我遇到了和你一样的问题。 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();
    }

关于c# - asp.net gridview 分页和排序与 linq to sql 自定义 linq 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5669516/

相关文章:

c# - C#中的这个参数修饰符?

c# - <% this.Parameter %> 引号内;在引号内使用时,ASP 变量无法正确显示在页面上

asp.net - 停止在 ASP.NET 中继器上显示标题

c# - 您可以预缓存 ASP.NET 包吗?

javascript - 打开模式对话框窗口在 Chrome 中不起作用

c# - 使用linq通过两个表中的多列进行简单连接的问题

.net - 使用 linq to sql 与创建自己的数据层有什么优缺点?

c# - asp.net core 2.1 中的值对象作为无效对象

c# - 从 .NET 4.5.1 应用程序 (EXE) 引用 .NET 3.5 DLL 使用 .NET 4.5.1 对象

c# - LINQ查询相当于SQL