原文地址: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 动态创建字段及主细关系表过程的更多相关文章

  1. odoo 动态创建字段的方法

    动态创建字段并非一个常见的的需求,但某些情况下,我们确实又需要动态地创建字段. Odoo 中创建字段的方法有两种,一种是通过python文件class中进行定义,另一种是在界面上手工创建,odoo通过 ...

  2. 内存表 FDMemTable ClientDataSet CreateDataSet 动态创建字段

    https://community.embarcadero.com/index.php/blogs/entry/firedac-in-memory-dataset-tfdmemtable Client ...

  3. C#动态创建和动态使用程序集、类、方法、字段等

    C#动态创建和动态使用程序集.类.方法.字段等 分类:技术交流 (3204)  (3)   首先需要知道动态创建这些类型是使用的一些什么技术呢?其实只要相关动态加载程序集呀,类呀,都是使用反射,那么动 ...

  4. silverlight依据json字符串动态创建实体类

    1.接收json字符串: //用JsonValue转换json字符串是为了之后获得json字符串的每行数据和每一列的列名 JsonValue jv = JsonValue.Parse(json);   ...

  5. 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 ...

  6. Devexpress datagrid动态添加显示指定列的gridView

    代码如下: public class DXGridControlHelper { /// <summary> /// 获取显示指定列的GridView /// </summary&g ...

  7. DevExpress GridControl 使用方法技巧 总结 收录整理

    一.如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 二.如何新增一条记录 ().gridView.AddNe ...

  8. DevExpress GridControl使用(转)

    DevExpress GridControl使用 (一)原汁原味的表格展示 Dev控件中的表格控件GridControl控件非常强大.不过,一些细枝末节的地方有时候用起来不好找挺讨厌的.使用过程中,多 ...

  9. C# DevExpress GridControl使用方法

    一.如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 二.如何新增一条记录 ().gridView.AddNe ...

随机推荐

  1. MVC扩展ModelBinder,通过继承DefaultModelBinder把表单数据封装成类作为action参数

    把视图省.市.街道表单数据,封装成一个类,作为action参数.如下: action方法参数类型: namespace MvcApplication1.Models{    public class ...

  2. failed to get the task for process XXX(解决方案)

    引人: iOS真机调试程序,报如下错误信息: failed to get the task for process XXX 原因: 证书问题,project和targets的证书都必须是开发证书,AD ...

  3. 撤销正在审核的app

    一个app还未通过审核,但是新版本已经出来了,怎样才能撤销正在审核的app呢? 方法:在 是binary deatils里用 reject this binary.之后,即可以重新上传代码了.

  4. glassfish3 读不到web程序的jar包

    现在项目中用到glassfish3,部署了一个web程序.可以访问到首页,但是在登陆的时候提示找不到数据库的驱动包.这个jar包我是放在web-inf/lib下的.但是glassfish就是报找不到j ...

  5. 成为Java高手的25个学习目标

    本文将告诉你学习Java需要达到的25个目标,希望能够对你的学习及找工作有所帮助.对比一下自己,你已经掌握了这25条中的多少 条了呢? 1.你需要精通面向对象分析与设计(OOA/OOD).涉及模式(G ...

  6. [PHP] ubuntu16.04下 Phpstorm发布项目到apache

    reference to : http://blog.csdn.net/qq_23937195/article/details/72953308 在网上找的不靠谱,倒腾了大半天的,终于找到正确姿势QA ...

  7. 机器学习简史brief history of machine learning

    BRIEF HISTORY OF MACHINE LEARNING My subjective ML timeline (click for larger) Since the initial sta ...

  8. 利用MyBatis的动态SQL特性抽象统一SQL查询接口

    1. SQL查询的统一抽象 MyBatis制动动态SQL的构造,利用动态SQL和自定义的参数Bean抽象,可以将绝大部分SQL查询抽象为一个统一接口,查询参数使用一个自定义bean继承Map,使用映射 ...

  9. OpenCV学习(31) 基于defects的简单手势

    前几年在做毕业设计时候曾用opencv1.0中defects做过简单的手势识别,这几天看OpenCV2.46中的轮廓函数,发现和以前差别挺大,函数调用完全不一样,重新实现了简单手势的代码. 1.首先用 ...

  10. HDU 3910 (13.10.31)

    Description Maybe you know “San Guo Sha”, but I guess you didn’t hear the game: “Liang Guo Sha”! Let ...