asp.net gridview的分页和LINQ to SQL的定制LINQ语句排序 [英] asp.net gridview paging and sorting with linq to sql custom linq statement

查看:96
本文介绍了asp.net gridview的分页和LINQ to SQL的定制LINQ语句排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好吧,我知道这真的不能那么难,但无法找到任何信息,IM。我有我与基于用户选择的日期范围内的数据填充页面上的GridView(下拉列表)。当用户点击该按钮我填的是GridView和显示。这是使用LINQ到SQL全部完成。我需要impliment分页和排序为好。请帮助!!!下面是我的按钮单击事件......我愿意接受任何建议,得到这个工作。

 保护无效btnGenerate_Click(对象发件人,EventArgs的发送)
     {
         INT DATERANGE = 0;
         如果(rbDateList.Checked)
         {
             开关(ddlDateRange.SelectedIndex)
             {
                 情况下0:
                     DATERANGE = 30;
                     打破;
                 情况1:
                     DATERANGE = 60;
                     打破;
                 案例2:
                     DATERANGE = 90;
                     打破;
                 默认:
                     DATERANGE = 30;
                     打破;
             }
         }
         GYTDataContext GT =新GYTDataContext();
         VAR productList的=从o在gt.PurchaseOrderDetails
                           加入p在gt.Products上o.ProductId等于p.ProductId
                           加入h本gt.PurchaseOrderHeaders上o.PurchaseOrderId等于h.PurchaseOrderId
                           其中,h.OrderDate> DateTime.Now.AddDays(-dateRange)
                           O组由o.ProductId到orderedItems
                           新选择
                           {
                               orderedItems.Key,
                               QuantityOrdered = orderedItems.Sum(S => s.OrderQuantity)
                           };
         VAR totalOrderInfo来自中,p = productList的
                              加入gt.Products PROD
                              在p.Key等于prod.ProductId
                              新选择
                              {
                                  prod.Reference,
                                  单价= 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:文本框ID =txtLastName=服务器>< / ASP:文本框>
< ASP:按钮的ID =btnFilter=服务器文本=过滤器
    的onclick =btnFilter_Click/>< ASP:使用LinqDataSource ID =LinqDataSource1=服务器
    onselecting =LinqDataSource1_Selecting>
< / ASP:使用LinqDataSource>< ASP:GridView控件ID =GridView1=服务器AllowPaging =真
    AllowSorting =真的AutoGenerateColumns =FALSE的DataSourceID =LinqDataSource1>
    <柱体和GT;
        < ASP:BoundField的数据字段=名字的HeaderText =姓只读=真
            SORTEX pression =名字/>
        < ASP:BoundField的数据字段=中间名的HeaderText =中间名只读=真
            SORTEX pression =中间名/>
        < ASP:BoundField的数据字段=姓氏的HeaderText =姓氏只读=真
            SORTEX pression =姓氏/>
    < /专栏>
< / ASP:GridView的>

codeBEHIND:

 保护无效LinqDataSource1_Selecting(对象发件人,LinqDataSourceSelectEventArgs E)
    {
        VAR CTX =新LinqDataSource.DBDataContext();
        IQueryable的<客户>客户= ctx.Customers;        如果(!String.IsNullOrEmpty(txtLastName.Text))
            客户= customers.Where(C => c.LastName.Contains(txtLastName.Text));        e.Result =客户;
    }    保护无效btnFilter_Click(对象发件人,EventArgs的发送)
    {
        GridView1.DataBind();
    }

Ok, I know this cant really be that hard, but im having trouble finding any info. I have a gridview on the page that i am filling with data based on a user selected date range(a dropdown list). When the user clicks the button i fill the gridview and display it. This is all done using Linq to Sql. I need to impliment paging and sorting as well. Help PLEASE!!! Below is my button click event... i am open to any suggestions to get this working

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;

解决方案

I had the same problem as you. Most examples of linqdatasource, ilustare the WhereParameters > controlparameter functionality which is cool but not that powerful.

The answer is simple: Use a LinqDataSource and just implement the "onselecting" event pass whatever kind of data you wish.

Here is a short example with full filtering-paging-ordering capabilities (also note that the populated sql is optimal and only requests top 10 records every time)

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>

CODEBEHIND:

    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();
    }

这篇关于asp.net gridview的分页和LINQ to SQL的定制LINQ语句排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆