2011-04-14 60 views
4

好吧,我知道這不能真的很難,但我很難找到任何信息。我在頁面上有一個gridview,根據用戶選擇的日期範圍(下拉列表)填充數據。當用戶點擊按鈕我填寫gridview並顯示它。這一切都是使用Linq to Sql完成的。我需要實現分頁和排序。請幫助!!!下面是我的按鈕單擊事件......我願意接受任何建議,得到這個工作asp.net gridview分頁和使用LINQ到SQL自定義LINQ語句排序

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; 

回答

5

我有同樣的問題,因爲你。 linqdatasource,ilustare的大部分例子都是WhereParameters>控件參數的功能,它很酷但不是很強大。

答案很簡單: 使用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(); 
    } 
1

由於您使用LINQ到SQL與GYTDataContext,爲什麼不使用LinqDataSource來填充你的GridView?

LinqDataSource可以自動處理分頁和排序。

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

+0

香港專業教育學院有兩個PROBL ems使用任何一個數據源(linqdatasource或objectdatasource)。問題1是我如何創建一個像在數據源中使用的即時消息的查詢,也許有一個更短或更直接的方法來試圖做什麼。問題二是我如何處理點擊事件 – 2011-04-14 21:01:33