zoukankan      html  css  js  c++  java
  • 自定义xtraGrid mater/ detail 数据结构显示


    xtraGrid 本身支持DataSet master/detail的数据直接帮定.可以参看其文档,
    当然也可以继承接口:DevExpress.Data.IRelationList  定义自己的数据源.

    还有可以动态来帮定detail的数据.- 通过事件触发的方式.
    根据今天我的探索,写一点动态帮定经验.

    我有两个实体类
    1. orderItem 继承了myCollectionBase(来之于CollectionBase)
    2. item (明细类)
    [DBTableAttr("SalesOrder")]
        
    public class orderItem : myCollectionBase
        
    {
            
    public orderItem()
            
    {
            }



            
    public bool FoundFlag
            
    {
                
    get
                
    {
                    
    if (this.Count > 0)
                        
    return true;
                    
    else
                        
    return false;
                }

            }

          
            [DBColumnAttr(
    "ordersn")]
            
    public String OrderSn
            
    {
                
    get return _orderSn; }
                
    set { _orderSn = value; }
            }

            [DBColumnAttr(
    "OrderApplyDate")]
            
    public Object OrderApplyDate
            
    {
                
    get return _orderApplyDate; }
                
    set { _orderApplyDate = value; }
            }

            [DBColumnAttr(
    "DeliveryLocation")]
            
    public String DeliveryLocation
            
    {
                
    get return _deliveryLocation; }
                
    set { _deliveryLocation = value; }
            }

       

            
            
    private String _orderSn ="";
            
    private Object _orderApplyDate;
            
    private String _deliveryLocation ="";
            
    //private bool _foundFlag = false;


            
    class item

        }


    master的数据源也是一个myCollection对象 : _orders

    //获取并帮定master数据源的代码
    try
                
    {
                    orderItem ot 
    = _orderBiz.GetOrderInfoByOrderSn(ordersn, true);
                    _orders.Add(ot);
                    
    //MessageBox.Show(_orders.Count.ToString());
                    gridControl1.DataSource = _orders;
                    gridControl1.RefreshDataSource();
                    

                }

                
    catch (Exception ex)
                
    {

                    MessageBox.Show(String.Format(
    " 出错: {0}",ex.Message) );
                }


    detail数据源则是_orders[i] ,它本身也是一个Collection对象.

    先用设计器把想显示的数据列设计好


    gridControls 都必然有一个MainView,主视图,你可以通过设计器修改主视图,我就设定gridView1为它的主视图(见上图).

    接着通过Create a new level 来创建一个新级别,所有的级别都比MainView至少低一个级别.

    我把第二级别定义为orderItems而它使用orderDetail视图来实现数据.

    MasterRowGetRelationCount  这个事件只要定义e.RelationCount = 2; 就可以了,这样在界面上才可以看到数据前有+号.

    这个事件主要是定义gridView1的关联级别是那一个(注意是orderItems,而不是orderDetail)
            private void gridView1_MasterRowGetRelationName(object sender, DevExpress.XtraGrid.Views.Grid.MasterRowGetRelationNameEventArgs e)
            
    {
                e.RelationName 
    = "orderItems";
            }


     private void gridView1_MasterRowGetChildList(object sender, DevExpress.XtraGrid.Views.Grid.MasterRowGetChildListEventArgs e)
            
    {



                e.ChildList 
    = (Fiberxon.DataAccess.myCollectionBase)_orders[gridView1.GetDataSourceRowIndex(e.RowHandle)];

    //为什么不是下面这个?大家考虑一下(提示:排序.)
    //   e.ChildList = (Fiberxon.DataAccess.myCollectionBase)_orders[e.RowHandle];

            }


    private void gridView1_MasterRowEmpty(object sender, DevExpress.XtraGrid.Views.Grid.MasterRowEmptyEventArgs e)
            
    {
    //没有这个,则+号是虚的,无法点开
                e.IsEmpty = false;
                
            }

    完成了.运行试试看.

  • 相关阅读:
    正则元字符总表
    Request中的各种地址
    JSONP实例
    【Kindeditor编辑器】 文件上传、空间管理
    【加密算法】SHA
    【加密算法】DES
    【加密算法】3DES
    【加密算法】Base64
    【加密算法】MD5
    【加密算法】AES
  • 原文地址:https://www.cnblogs.com/king_astar/p/422667.html
Copyright © 2011-2022 走看看