表格内显示多表关联数据解决方案(Join,View,Lookup)
文档介绍
开发基于数据库管理应用系统时,特别是业务单据的主从表会关联大量数据字典,比如订单业务会关联客户名称,产品名称,单位名称,货币名称等,而表结构只定义相关编号,如CustomerCode,ProductCode,UnitCode,CurrencyCode,业务表与字典表是通过编号建立主外键关联,但是在界面上,用户希望看到的不是编号而是名称。
最简单的做法是拖放一个表格,然后通过关联查询一次性取数据下来展示,用户即能看到编号又能看到对应的名称,两全其美。关于如何显示关联数据有很多种做作法,可谓仁者见仁,智者见智,实现上视需求不同而不同,下面我介绍几种常用做法:
1. 多表JOIN 查询,表格内显示多个表的数据。将查询逻辑写入存储过程,数据层调用SP。
2. 使用视图,将业务表与字典表作为视图关联起来,数据层从该视图获取数据。
3. 使用Lookup参照字段,适用于小数据量的字典表。
优缺点:
方案1. 多表JOIN 查询,将SQL写入数据层或封装成SP。缺点是数据层SQL语句或存储过程会很多,不易维护。
方案2. 数据层SQL语句较少,业务表与字典表的逻辑关联在视图 (View) 内实现。
方案3. 使用LookUpEdit组件显示关联数据可减少DB服务器的查询压力,并且可以共享客户端缓存的字典数据,但有个致命的缺点:必须保证从数据库下载了字典数据才能使用LookUpEdit组件。此作法适用于显示少数据量的字典数据,比如:货币名称,单位名称,毕竟系统内用到的货币和单位数据不多。
建议选择性的使用以上三种方案。
方案1 GridColumn.ColumnEdit属性绑定LookUpEdit组件,用于显示产品名称或用户名。
方案3 GridColumn.ColumnEdit属性绑定LookUpEdit组件后数据显示,黄底色是参照字段(LookUpEdit)自动显示的数据。
/// <summary>
/// 查询类型
/// </summary>
public enum QueryType
{
/// <summary>
/// 多表Join查询
/// </summary>
JoinSQL,
/// <summary>
/// 从视图取数据
/// </summary>
View,
/// <summary>
/// 不使用任何关联查询,表格内用LookUpEdit控件展示关联数据。
/// </summary>
LookupField
}
/// <summary>
/// 本示范程序查询功能接口
/// </summary>
public interface IMultiQuery
{
DataSet GetData(string PK);
void ShowData(DataSet data);
}
/// <summary>
/// 对象工厂,跟据查询类型创建BLL。
/// </summary>
public class ObjectFactory
{
public static IMultiQuery CreateQuery(QueryType queryType, XtraTabPage page, GridControl gc)
{
if (QueryType.JoinSQL == queryType) return new Demo_Join(page, gc);
if (QueryType.View == queryType) return new Demo_View(page, gc);
if (QueryType.LookupField == queryType) return new Demo_PhysicalTable(page, gc);
return null;
}
}
如转载请注明出处,www.csframework.com C/S框架网
先附加数据库,然后修改DBHelper._ConnectionString 。
Source Code for VIP:
扫一扫加微信