FineUI EF6 数据库分页查询 页面说明

本文介绍如何利用Entity Framework 6.1.3实现复杂的实时查询功能,包括模糊搜索、排序及分页,并展示了实际代码示例。



既然LINQ TO SQL是微软的一个过渡产品,我们后续在WMS开发中,立马使用了ENTITY FRAMEWORK 数据库工具。  版本是6.1.3.

让我们看看我们要实现的功能界面:

1.2.3 模糊查询

4. 排序(按选择条件的全部页排序)

5.7 点选出现选中文字,方便用户拷贝




前端页面(写html的页面),对表格grid控件的参数定义如下,我喜欢一类放一行,参数实在是太多太乱了,而且少一个还不行。。


看看点击3号button,我们的服务器端页面的代码:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using FineUI;
using System.Data;
using System.Text;
using System.IO;
using System.Data.SqlClient;
using System.Linq;
using System.Data.Entity;
using System.Data.Objects;
using System.Data.Objects.SqlClient;
using System.Linq.Expressions;
using System.Linq.Dynamic;

//点击查询按钮
        protected void Button1_Click(object sender, EventArgs e)
        {
            BindGrid();
        }
 
        private void BindGrid()
        {        

            // 1. 查询和条件            
            var allpages = from c in po.db.GR
                           where
                               (
                               (c.ASN.Contains(TextBox1.Text) || string.IsNullOrEmpty(TextBox1.Text.Trim())) &&
                               (c.MATNR.Contains(TextBox2.Text) || string.IsNullOrEmpty(TextBox2.Text.Trim())) &&
                               (c.LIFNR.Contains(TextBox3.Text) || string.IsNullOrEmpty(TextBox3.Text.Trim())) &&
                               (((EntityFunctions.TruncateTime(c.SCANDATE) >= DatePicker1.SelectedDate.Value)) || string.IsNullOrEmpty(DatePicker1.Text.Trim())) &&
                               (((EntityFunctions.TruncateTime(c.SCANDATE) <= DatePicker2.SelectedDate.Value)) || string.IsNullOrEmpty(DatePicker2.Text.Trim()))
                               )
                           select c;  

            // 2.总记录数RecordCount 
            Grid1.RecordCount = allpages.Count();

            // 3.排序和分页数据           
            var onepage = allpages.OrderBy(Grid1.SortField + " " + Grid1.SortDirection).Skip(Grid1.PageIndex * Grid1.PageSize).Take(Grid1.PageSize);


            //---------------------------------------
           DataTable t = mytools.ListToDataTable(onepage.ToList());

            // 4. 绑定到Grid  
            Grid1.DataSource = t;
            Grid1.DataBind();

            //全局变量,下载xls用     
            dt = mytools.ListToDataTable(allpages.ToList());

        }

    // 3 说明一下 ,Grid1.SortField 这个参数在字段定义中出现,就表示这列,可以排序。Grid1.SortDirection参数是升序还是降序。

allpages.OrderBy(Grid1.SortField + " " + Grid1.SortDirection) 这个功能,要使用EF的Dynamic库,不然就要像FineUI官网那样搞一整篇的代码来实现:


就这样简单的几行,就实现了如此强大的功能。


我们再来看看每页记录数这个功能,每页记录数是允许用户改的,我设定了15,30, 50, 100这些,看看前端页面的代码:

 <f:Grid ID="Grid1" ShowBorder="false" ShowHeader="false" runat="server"         

            PageSize="15" AllowPaging="true" IsDatabasePaging="true"  OnPageIndexChange="Grid1_PageIndexChange"

            AllowSorting="true" SortField="BOXBARCODE" SortDirection="ASC"  OnSort="Grid1_Sort" 
            
            EnableMultiSelect="false" EnableRowClickEvent="true" OnRowClick="Grid1_RowClick" 
            
            DataKeyNames="ASN,BOXBARCODE,MATNR,LIFNR" 
            > 

                <Columns>
                    <f:BoundField DataField="ASN" SortField="ASN"   HeaderText="ASN号"  MinWidth="100px" />
                    <f:BoundField DataField="BOXBARCODE"  SortField="BOXBARCODE"                    HeaderText="包装箱条码" MinWidth="220px" />
                    <f:BoundField DataField="SCANDATE"  SortField="SCANDATE"                     HeaderText="日期" DataFormatString="{0:yyyy.MM.dd HH:mm:ss}" MinWidth="150px"/>
                    <f:BoundField DataField="LGORT"     SortField="LGORT"                                 HeaderText="地点" />
                    <f:BoundField DataField="MATNR"     SortField="MATNR"                                     HeaderText="物料" />
                    <f:BoundField DataField="MATNR_NAME"     SortField="MATNR_NAME"                           HeaderText="物料描述" MinWidth="220px" />
                    <f:BoundField DataField="LIFNR"     SortField="LIFNR"                                         HeaderText="供应商" />
                    <f:BoundField DataField="MENGE"     SortField="MENGE"                                              HeaderText="数量" />
                    <f:BoundField DataField="WERKS"    SortField="WERKS"                                  HeaderText="工厂" />
                    <f:BoundField DataField="ISGW"     SortField="ISGW"                                      HeaderText="归位" />
                </Columns>

                <PageItems>

                <f:ToolbarSeparator ID="ToolbarSeparator1" runat="server">
                </f:ToolbarSeparator>
                <f:ToolbarText ID="ToolbarText2" runat="server" Text="每页记录数:">
                </f:ToolbarText>
                <f:DropDownList runat="server" ID="ddlPageSize" Width="50px" AutoPostBack="true"
                    OnSelectedIndexChanged="ddlPageSize_SelectedIndexChanged">
                    <f:ListItem Text="15" Value="15" />
                    <f:ListItem Text="30" Value="30" />
                    <f:ListItem Text="50" Value="50" />
                    <f:ListItem Text="100" Value="100" />
                </f:DropDownList>


                <f:ToolbarSeparator ID="ToolbarSeparator2" runat="server">           </f:ToolbarSeparator>
                 <f:ToolbarText ID="ToolbarText12" runat="server" Text=""></f:ToolbarText>

                </PageItems>                


            </f:Grid>

前端页面的DropDownList中,选择15,30,50,100之一。会触发一个函数 OnSelectedIndexChanged="ddlPageSize_SelectedIndexChanged",这个函数是对应于服务器的页面里存在的,我们看看服务器上C#代码:

         protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
         {
             Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);           
         }


这样,就改变了PageSize="15"这个变量的值。我们在查询时就可以用到。



最后选中某一行,可以把关键字段放7的位置,方便用户去拷贝来用。

先看看前端页面grid的参数定义: EnableMultiSelect="false" EnableRowClickEvent="true" OnRowClick="Grid1_RowClick"  ,又一个触发函数,这个函数是对应于服务器的页面里存在的,我们看看服务器上C#代码:


        protected void Grid1_RowClick(object sender, GridRowClickEventArgs e)
        {
          
            ToolbarText12.Text = mytools.s(Grid1.DataKeys[Grid1.SelectedRowIndexArray[0]][0]) + " ";
            ToolbarText12.Text = ToolbarText12.Text + mytools.s(Grid1.DataKeys[Grid1.SelectedRowIndexArray[0]][1]) + " ";
            ToolbarText12.Text = ToolbarText12.Text + mytools.s(Grid1.DataKeys[Grid1.SelectedRowIndexArray[0]][2]) + " ";
            ToolbarText12.Text = ToolbarText12.Text + mytools.s(Grid1.DataKeys[Grid1.SelectedRowIndexArray[0]][3]) + " "; 

        }
取了4个字段,而这4个字段,就是我们前端页面grid参数定义的:DataKeyNames="ASN,BOXBARCODE,MATNR,LIFNR" 。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘欣的博客

你将成为第一个打赏博主的人!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值