DevExpress GridControl 动态创建字段及主细关系表过程
原文地址:http://hi.baidu.com/qdseashore/item/38f1153e9d0143637d034b7a
在做项目中,往往需要在查询基类模板窗口内做主细关系Grid,引用一下代码可减少工作量,只需给此过程传递主、细SQL语句以及关联的关键字段即可完成如图所示的效果:
#region 执行主细查询过程
public void ExeQuery(string sMSql,string sDSql,string RelaitionField)
{
int iMCountItemNum = 0; int iDCountItemNum = 0;
int iMSumItemNum = 0; int iDSumItemNum = 0;
//查询。
if (sMSql == null || sMSql == "" || sDSql == null || sDSql == "")
{
return;
}
#region 根据SQL填充主、细表
using (OracleConnection connection = new OracleConnection(DbHelperOra.connectionString))
{
_dtQuery = new DataSet();
try
{
connection.Open();
OracleDataAdapter command = new OracleDataAdapter(sMSql, connection);
command.Fill(_dtQuery, "MA");
command.SelectCommand.CommandText=sDSql;
command.Fill(_dtQuery,"DE");
command.Dispose();
}
catch (System.Data.OracleClient.OracleException ex)
{
}
finally
{
connection.Close();
}
}
#endregion
#region 主表动态构造字段。
try
{
//获取到表结构。
if (_dtQuery.Tables["MA"].Rows.Count >= 0)
{
gvMainList.Columns.Clear();
gvMainList.GroupSummary.Clear();
gvMainList.ClearGrouping();
//gvMainList.OptionsBehavior.Editable = true;
int iVisible = 0;
//根据表结构动态加载到GridControl控件中。
foreach (DataColumn _dcQuery in _dtQuery.Tables["MA"].Columns)
{
iVisible++;
//动态添加
DevExpress.XtraGrid.Columns.GridColumn gcQueryList = new DevExpress.XtraGrid.Columns.GridColumn();
gcQueryList.Name = "_dc" + _dcQuery.ColumnName.ToUpper();
gcQueryList.Caption = _dcQuery.ColumnName;
gcQueryList.FieldName = _dcQuery.ColumnName;
//数字类型
if ((_dcQuery.DataType.ToString().ToUpper() == "SYSTEM.DECIMAL" || _dcQuery.DataType.ToString().ToUpper() == "SYSTEM.DOUBLE") &&
((gcQueryList.Caption.IndexOf("金额") >= 0) || (gcQueryList.Caption.IndexOf("价格") >= 0)
|| (gcQueryList.Caption.IndexOf("人民币") >= 0) || (gcQueryList.Caption.IndexOf("美元") >= 0)
|| (gcQueryList.Caption.IndexOf("单价") >= 0) || (gcQueryList.Caption.IndexOf("个") >= 0)
|| (gcQueryList.Caption.IndexOf("件") >= 0) || (gcQueryList.Caption.IndexOf("箱") >= 0)
|| (gcQueryList.Caption.IndexOf("数量") >= 0)) && iMSumItemNum < 1)
{
iMSumItemNum++;
gcQueryList.SummaryItem.FieldName = _dcQuery.ColumnName;
gcQueryList.SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Sum;
gvMainList.GroupSummary.Add(DevExpress.Data.SummaryItemType.Sum, _dcQuery.ColumnName, null, " 小计:{0}");
}
else if ((_dcQuery.DataType.ToString().ToUpper() == "SYSTEM.DECIMAL" || _dcQuery.DataType.ToString().ToUpper() == "SYSTEM.STRING") &&
((gcQueryList.Caption.IndexOf("序号") >= 0) || (gcQueryList.Caption.IndexOf("流水") >= 0)
|| (gcQueryList.Caption.IndexOf("ID") >= 0) || (gcQueryList.Caption.IndexOf("编号") >= 0)
|| (gcQueryList.Caption.IndexOf("箱号") >= 0) || (gcQueryList.Caption.IndexOf("尺寸") >= 0)
|| (gcQueryList.Caption.IndexOf("序") >= 0) || (gcQueryList.Caption.IndexOf("单号") >= 0)) && iMCountItemNum < 1)
{
iMCountItemNum++;
gcQueryList.SummaryItem.FieldName = _dcQuery.ColumnName;
gcQueryList.SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Count;
gvMainList.GroupSummary.Add(DevExpress.Data.SummaryItemType.Count, _dcQuery.ColumnName, null, " 小计:{0}");
}
if (gcQueryList.FieldName != null && RelaitionField != null && gcQueryList.FieldName.ToUpper() != RelaitionField.ToUpper())
{
gcQueryList.VisibleIndex = iVisible;
gcQueryList.Visible = true;
}
else
{
gcQueryList.VisibleIndex = -1;
gcQueryList.Visible = false;
}
//gcQueryList.ColumnEdit.ReadOnly = true;
gvMainList.Columns.Add(gcQueryList);
}
}
gcMainList.MainView = gvMainList;
}
catch (System.Exception ex)
{
MsgBox.ErrorMsg("执行查询失败! 失败原因:" + ex.Message);
}
#endregion
#region 子表构造字段
try
{
//获取到表结构。
if (_dtQuery.Tables["DE"].Rows.Count >= 0)
{
DevExpress.XtraGrid.Views.Grid.GridView gvMainDetail = new DevExpress.XtraGrid.Views.Grid.GridView();
// gvMainDetail.Columns.Clear();
// gvMainDetail.GroupSummary.Clear();
// gvMainDetail.ClearGrouping();
// gvMainDetail.OptionsBehavior.Editable = true;
int iVisible = 0;
//根据表结构动态加载到GridControl控件中。
foreach (DataColumn _dcQueryDetail in _dtQuery.Tables["DE"].Columns)
{
iVisible++;
//动态添加
DevExpress.XtraGrid.Columns.GridColumn gcDetialQueryList = new DevExpress.XtraGrid.Columns.GridColumn();
gcDetialQueryList.Name = "_dcD" + _dcQueryDetail.ColumnName.ToUpper();
gcDetialQueryList.Caption = _dcQueryDetail.ColumnName;
gcDetialQueryList.FieldName = _dcQueryDetail.ColumnName;
//数字类型
if ((_dcQueryDetail.DataType.ToString().ToUpper() == "SYSTEM.DECIMAL" || _dcQueryDetail.DataType.ToString().ToUpper() == "SYSTEM.DOUBLE") &&
((gcDetialQueryList.Caption.IndexOf("金额") >= 0) || (gcDetialQueryList.Caption.IndexOf("价格") >= 0)
|| (gcDetialQueryList.Caption.IndexOf("人民币") >= 0) || (gcDetialQueryList.Caption.IndexOf("美元") >= 0)
|| (gcDetialQueryList.Caption.IndexOf("单价") >= 0) || (gcDetialQueryList.Caption.IndexOf("个") >= 0)
|| (gcDetialQueryList.Caption.IndexOf("件") >= 0) || (gcDetialQueryList.Caption.IndexOf("箱") >= 0)
|| (gcDetialQueryList.Caption.IndexOf("数量") >= 0)) && iDSumItemNum < 1)
{
iDSumItemNum++;
gcDetialQueryList.SummaryItem.FieldName = _dcQueryDetail.ColumnName;
gcDetialQueryList.SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Sum;
gvMainDetail.GroupSummary.Add(DevExpress.Data.SummaryItemType.Sum, _dcQueryDetail.ColumnName, null, " 小计:{0}");
}
else if ((_dcQueryDetail.DataType.ToString().ToUpper() == "SYSTEM.DECIMAL" || _dcQueryDetail.DataType.ToString().ToUpper() == "SYSTEM.STRING") &&
((gcDetialQueryList.Caption.IndexOf("序号") >= 0) || (gcDetialQueryList.Caption.IndexOf("流水") >= 0)
|| (gcDetialQueryList.Caption.IndexOf("ID") >= 0) || (gcDetialQueryList.Caption.IndexOf("编号") >= 0)
|| (gcDetialQueryList.Caption.IndexOf("箱号") >= 0) || (gcDetialQueryList.Caption.IndexOf("尺寸") >= 0)
|| (gcDetialQueryList.Caption.IndexOf("序") >= 0) || (gcDetialQueryList.Caption.IndexOf("单号") >= 0)) && iDCountItemNum < 1)
{
iDCountItemNum++;
gcDetialQueryList.SummaryItem.FieldName = _dcQueryDetail.ColumnName;
gcDetialQueryList.SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Count;
gvMainDetail.GroupSummary.Add(DevExpress.Data.SummaryItemType.Count, _dcQueryDetail.ColumnName, null, " 小计:{0}");
}
if (gcDetialQueryList.FieldName != null && RelaitionField != null && gcDetialQueryList.FieldName.ToUpper() != RelaitionField.ToUpper())
{
gcDetialQueryList.VisibleIndex = iVisible;
gcDetialQueryList.Visible = true;
}
else
{
gcDetialQueryList.VisibleIndex = -1;
gcDetialQueryList.Visible = false;
}
//gcDetialQueryList.ColumnEdit.ReadOnly = true;
gvMainDetail.Columns.Add(gcDetialQueryList);
}
gcMainList.ViewCollection.Add(gvMainDetail);
}
}
catch (System.Exception ex)
{
MsgBox.ErrorMsg("执行查询失败! 失败原因:" + ex.Message);
}
#endregion
#region 建立关系并填充数据源
_dtQuery.Relations.Add("RMD", _dtQuery.Tables["MA"].Columns[RelaitionField], _dtQuery.Tables["DE"].Columns[RelaitionField], false);
gcMainList.DataSource = _dtQuery.Tables["MA"];
gvMainList.BestFitColumns();
#endregion
}
#endregion
效果如图:

DevExpress GridControl 动态创建字段及主细关系表过程的更多相关文章
- odoo 动态创建字段的方法
动态创建字段并非一个常见的的需求,但某些情况下,我们确实又需要动态地创建字段. Odoo 中创建字段的方法有两种,一种是通过python文件class中进行定义,另一种是在界面上手工创建,odoo通过 ...
- 内存表 FDMemTable ClientDataSet CreateDataSet 动态创建字段
https://community.embarcadero.com/index.php/blogs/entry/firedac-in-memory-dataset-tfdmemtable Client ...
- C#动态创建和动态使用程序集、类、方法、字段等
C#动态创建和动态使用程序集.类.方法.字段等 分类:技术交流 (3204) (3) 首先需要知道动态创建这些类型是使用的一些什么技术呢?其实只要相关动态加载程序集呀,类呀,都是使用反射,那么动 ...
- silverlight依据json字符串动态创建实体类
1.接收json字符串: //用JsonValue转换json字符串是为了之后获得json字符串的每行数据和每一列的列名 JsonValue jv = JsonValue.Parse(json); ...
- ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段
ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...
- Devexpress datagrid动态添加显示指定列的gridView
代码如下: public class DXGridControlHelper { /// <summary> /// 获取显示指定列的GridView /// </summary&g ...
- DevExpress GridControl 使用方法技巧 总结 收录整理
一.如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 二.如何新增一条记录 ().gridView.AddNe ...
- DevExpress GridControl使用(转)
DevExpress GridControl使用 (一)原汁原味的表格展示 Dev控件中的表格控件GridControl控件非常强大.不过,一些细枝末节的地方有时候用起来不好找挺讨厌的.使用过程中,多 ...
- C# DevExpress GridControl使用方法
一.如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 二.如何新增一条记录 ().gridView.AddNe ...
随机推荐
- C# 中的动态创建技术
[转载]原文出处 http://blog.csdn.net/baiyun789/article/details/6156694 第一部分 WinForm控件在窗体中动态居中创建.删除控件及对其赋值 ...
- JSONObject以及json(转)
一.JAR包简介 要使程序 可以运行 必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: 1.commons-lang.jar 2.commons- ...
- 算法:Rate of Growth
Rate of growth describes how an algorithm’s complexity changes as the input size grows. This is comm ...
- python接口自动化3-自动发帖(session)
前言 上一篇模拟登录博客园,但这只是第一步,一般登录后,还会有其它的操作,如发帖,评论等,这时候如何保持会话呢? (敲黑板!!!由于博客园最近登录机制变了,登录全部走cookie登录) 一.sessi ...
- Xcode插件管理器Alcatraz的使用
Xcode插件管理器Alcatraz的使用 下载地址 https://github.com/alcatraz/Alcatraz 下载软件包 解压以及编译 重启Xode并Load Bundle 安装插件 ...
- Android中RelativeLayout和LinearLayout性能分析
先看一些现象吧:用eclipse或者Android studio,新建一个Activity自动生成的布局文件都是RelativeLayout,或许你会认为这是IDE的默认设置问题,其实不然,这是由 a ...
- C语言运算符优先级及结合性
今天去翻了下C语言运算符的优先级和结合性,发现当初学习的时候就没认真记住,惭愧.发现一篇讲得不错的文章,编辑了下转来供以后翻阅. C语言运算符优先级表(由上至下,优先级依次递减) 运算符 结合性 () ...
- 把Scala代码当作脚本运行
1. 在类UNIX系统上作为脚本运行 在类Unix系统上,你可以设置一个shell前导词来执行脚本.如下例: Script.scala #!/usr/bin/env scala !# println( ...
- ING【转载】处理大并发系列
一直在处理高可用高并发的服务.看到网上有一个系列的文章,写的不错.跟进一下. 一:http://blog.csdn.net/feitianxuxue/article/details/8936802 二 ...
- Linked List Cycle leetcode II java (寻找链表环的入口)
题目: Given a linked list, return the node where the cycle begins. If there is no cycle, return null. ...