ASP.NET Web开发框架之四 查询

开发 后端
Enterprise Solution 支持用户自定义查询(query and lookup),并把查询query定义为一个标准功能,查找lookup用于返回查询的值给数据输入窗体。

Enterprise Solution 支持用户自定义查询(query and lookup),并把查询query定义为一个标准功能,查找lookup用于返回查询的值给数据输入窗体。

先配置数据库连接字符串,使用公司注册来注册一个新的数据库连接。再到查询设计器中,选取相应的对象,设计关联,Web框架可以解析此查询,变成一个页面功能。

在客户页面中,添加TriggerBox,它的后面会显示一个小图标,以查于查找数据

  1.  <ext:TriggerBox ID="tbxCustomerNo" ShowLabel="true" Readonly="false" TriggerIcon="Search" 
  2.                             OnTriggerClick="tbxCustomerNo_TriggerClick" OnTextChanged="tbxCustomerNo_TextChanged" 
  3.                             AutoPostBack="true" Label="Customer No." runat="server" Lookup="CustomerEntryLookup" 
  4.                             DataBindingString="CustomerEntity:CustomerNo">  
  5. </ext:TriggerBox> 

再来看后台代码的处理模式

  1. string lookup = tbxCustomerNo.Lookup;  
  2.              tbxCustomerNo.OnClientTriggerClick = Window1.GetSaveStateReference(tbxCustomerNo.ClientID, HiddenField1.ClientID, HiddenField2.ClientID)  
  3.                + Window1.GetShowReference(string.Format("lookup.aspx?id={0}", lookup), "Look-up:Customer"); 

从上面的Web页面中,我们已经指定了Lookup属性为CustomerEntryLookup。这一句是把Lookup与页面的Window1关联,以用于弹出窗口,同时指定了页面的HiddenField1为接受Lookup的返回值,***调用窗口的回发刷新过程,进行页面刷新,代码如下

  1. protected void Window1_Close(object sender, EventArgs e)  
  2. {  
  3.             string customerNo = tbxCustomerNo.Text;  
  4.             if (!string.IsNullOrWhiteSpace(customerNo))  
  5.             {  
  6.                 ReloadEntity(customerNo);              
  7.             }  
  8. }     

这样就完成了查询页面的弹出选择值,返回值给主窗体,***刷新主窗体。

再来看看lookup.aspx页面是如何设计的,它接受一个查询id为参数,这个参数,也就是我们指定的CustomerEntryLookup,在查询设计器中,它是这样被设计的

image

lookup.aspx页面接受传入的参数,它的初试化页面是这样设计的

  1. protected void Page_Init(object sender, EventArgs e)  
  2. {  
  3.             LookupName = Request.QueryString["id"];  
  4.            
  5.             ILookupDialogManager _lookupDialogManager = ClientProxyFactory.CreateProxyInstance<ILookupDialogManager>();  
  6.             string companycode = "TS";  
  7.             DataTable table = _lookupDialogManager.GetLookupDialogData(LookupName, nullnull, 0, 0, companycode);  
  8.             Grid1.RecordCount = table.Rows.Count;  
  9.  
  10.               BindGrid();  
  11.              

根据查询,得到记录总数,进行分页查询,这里的代码是Grid的分页代码,来看看BindGrid方法的定义,并不复杂。

  1. private void BindGrid()  
  2. {  
  3.             DataSet ds = LoadData(Grid1.PageIndex+1);  
  4.  
  5.             while (Grid1.Columns.Count > 0)  
  6.                 Grid1.Columns.RemoveAt(0);  
  7.  
  8.             foreach (DataColumn colu in ds.Tables[0].Columns)  
  9.             {  
  10.                 ExtAspNet.BoundField field = new ExtAspNet.BoundField();  
  11.                 field.ColumnID = colu.ColumnName;  
  12.                 field.DataField = colu.ColumnName;  
  13.                 field.HeaderText = GetTranslation(colu.ColumnName);  
  14.                 Grid1.Columns.Add(field);  
  15.             }  
  16.  
  17.             Grid1.PageSize = PageSize;  
  18.             
  19.             Grid1.DataSource = ds.Tables[0];  
  20.             Grid1.DataBind();  
  21.  } 

它先删除grid中原有的列,然后根据结果产生新的列,并对列名应用多语言翻译。这里要注意动态控件的创建时机,要选择在Page_Init中,而不是Page_Load中。在Debug时,看到的分页代码是数据库分页,每次只返回设定的行数。

Grid的分页事件样例代码如下所示,与GridView完全一样

  1. protected void Grid1_PageIndexChange(object sender, ExtAspNet.GridPageEventArgs e)  
  2. {  
  3.          Grid1.PageIndex = e.NewPageIndex;  
  4.          BindGrid();  

下面来看看lookup.aspx页面的二个按钮方法的代码。最简单的是Close,直接关闭窗体,不返回任何值给主窗体,它的代码最容易,如下所示

  1. btnClose.OnClientClick = ActiveWindow.GetHideReference(); 

复杂一点的,关闭后带值到主窗体中,代码如下所示

  1. protected void btnSaveClose_Click(object sender, EventArgs e)  
  2. {  
  3.             int rowIndex = Grid1.SelectedRowIndex;  
  4.             GridRow row = Grid1.Rows[rowIndex];  
  5.  
  6.             ILookupDialogManager lookupManager=ClientProxyFactory.CreateProxyInstance<ILookupDialogManager>();  
  7.             LookupDialogEntity lookup = lookupManager.GetLookupDialog(LookupName);  
  8.             List<string> keyFields = new List<string>();  
  9.         
  10.             keyFields.Add(lookup.KeyField1);  
  11.             keyFields.Add(lookup.KeyField2);  
  12.             keyFields.Add(lookup.KeyField3);  
  13.  
  14.             List<string> values = new List<string>();  
  15.             foreach (string keyField in keyFields)  
  16.             {  
  17.                 string value = string.Empty;  
  18.                 if (!string.IsNullOrWhiteSpace(keyField))  
  19.                 {  
  20.                     ExtAspNet.BoundField field = (ExtAspNet.BoundField)Grid1.FindColumn(keyField);  
  21.                     string f1 = field.DataField;  
  22.                     object f2 = Grid1.Rows[rowIndex].States[field.ColumnIndex];  
  23.                     value = Convert.ToString(((DataRowView)(Grid1.Rows[rowIndex].DataItem))[keyField]);                
  24.                 }  
  25.                 values.Add(value);  
  26.             }  
  27.             PageContext.RegisterStartupScript(ActiveWindow.GetWriteBackValueReference(values[0], values[1], values[2]) + ActiveWindow.GetHidePostBackReference());  
  28.  } 

这部分代码,有两个意图,取Grid中的值,然后返回给主窗体,因为要刷新主窗体,所以***加一项GetHidePostBackReference(),让主窗体回发,以调用在文章开头设计的Window1_Close,ReloadEntity完成对实体的重新绑定。

查询query与查找lookup的实现原理是一样的,都用于自定义的查找数据。query用于相对独立的功能,是可执行的,lookup则用于字段值的查找与返回,方便窗体数据输入。查询设计器中,不仅仅用对象设计查询,也可以直接输入SQL语句,或是调用存储过程来实现。

image

这样很方便于用户扩充系统查询功能,而不需要二次开发。

原文链接:http://www.cnblogs.com/JamesLi2015/archive/2012/09/25/2700992.html

【编辑推荐】

  1. ASP.NET Web开发框架项目介绍
  2. ASP.NET Web开发框架之一 功能导航
  3. ASP.NET Web开发框架之二 数据输入窗体
  4. ASP.NET Web开发框架之三 报表开发
  5. ASP.NET Web开发框架之五 控件扩展
  6. ASP.NET Web开发框架之六 数据库文档方法
  7. ASP.NET Web开发框架之七 开发流程与模式
责任编辑:张伟 来源: James Li的博客
相关推荐

2012-09-26 09:46:29

ASP.NETWeb框架

2012-09-18 11:02:10

ASP.NETC#Web Forms

2012-10-08 14:01:54

ASP.NETWebC

2012-09-20 09:54:12

ASP.NETWebC

2012-09-29 13:20:30

ASP.NETWeb框架

2012-09-18 14:32:08

ASP.NETC#

2009-07-29 09:38:06

Web开发ASP.NET

2012-09-19 14:10:58

ASP.NETWebC

2009-07-28 17:17:19

ASP.NET概述

2009-07-24 13:20:44

MVC框架ASP.NET

2014-06-30 09:22:38

ASP.NETBootstrap

2009-08-07 17:41:07

ASP.NET Web

2010-06-23 15:44:03

ASP.NET MVC

2009-08-03 17:35:07

ASP.NET WebASP.NET编程工具

2009-04-20 13:34:27

ASP.NET视频教程Web开发

2009-08-10 13:32:15

ASP.NET TimASP.NET组件设计

2009-07-28 15:53:43

ASP.NET Web

2009-07-29 17:16:47

2009-07-22 15:58:52

ASP.NET AJA

2009-07-23 10:52:38

点赞
收藏

51CTO技术栈公众号