既然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" 。
本文介绍如何利用Entity Framework 6.1.3实现复杂的实时查询功能,包括模糊搜索、排序及分页,并展示了实际代码示例。
602

被折叠的 条评论
为什么被折叠?



