Ejemplo n.º 1
0
 protected virtual void OnQueryDetails(QueryEntityDetailsEventArgs e)
 {
     if (this.QueryDetails != null)
     {
         this.QueryDetails(this, e);
     }
 }
        protected internal override IEnumerable GetDetailsForParentItem(DataGridCollectionViewBase parentCollectionView, object parentItem)
        {
            EntityObject entityObject = parentItem as EntityObject;

            if (entityObject == null)
            {
                return(null);
            }

            // Even if EntityObject is not in a loadable state, we must still return the IList
            // so that the ItemProperties can be extracted based on the elements type.
            bool entityObjectLoadable = ItemsSourceHelper.IsEntityObjectLoadable(entityObject);

            // We let the user take charge of handling the details.
            QueryEntityDetailsEventArgs args = new QueryEntityDetailsEventArgs(entityObject);

            if (entityObjectLoadable)
            {
                this.OnQueryDetails(args);
            }

            // The parentItem must implement IEntityWithRelationships
            Type parentItemType = parentItem.GetType();

            if (typeof(IEntityWithRelationships).IsAssignableFrom(parentItemType))
            {
                // Since the relationship was based on the the property
                // name, we must find that property using reflection.
                PropertyInfo propertyInfo = parentItemType.GetProperty(this.RelationName);

                if (propertyInfo != null)
                {
                    RelatedEnd relatedEnd = propertyInfo.GetValue(parentItem, null) as RelatedEnd;

                    if (relatedEnd != null)
                    {
                        // Make sure that the details are loaded
                        // except if the user already handled it.
                        if (!relatedEnd.IsLoaded &&
                            !args.Handled &&
                            entityObjectLoadable)
                        {
                            relatedEnd.Load();
                        }

                        IListSource listSource = relatedEnd as IListSource;

                        // Returns an IList to have proper change notification events.
                        if (listSource != null)
                        {
                            return(listSource.GetList());
                        }
                    }
                }
            }

            return(null);
        }
        protected virtual void OnQueryDetails(QueryEntityDetailsEventArgs e)
        {
            var handler = this.QueryDetails;

            if (handler == null)
            {
                return;
            }

            handler.Invoke(this, e);
        }
    protected internal override IEnumerable GetDetailsForParentItem( DataGridCollectionViewBase parentCollectionView, object parentItem )
    {
      EntityObject entityObject = parentItem as EntityObject;

      if( entityObject == null )
        return null;

      // Even if EntityObject is not in a loadable state, we must still return the IList
      // so that the ItemProperties can be extracted based on the elements type.
      bool entityObjectLoadable = ItemsSourceHelper.IsEntityObjectLoadable( entityObject );

      // We let the user take charge of handling the details.
      QueryEntityDetailsEventArgs args = new QueryEntityDetailsEventArgs( entityObject );

      if( entityObjectLoadable )
        this.OnQueryDetails( args );

      // The parentItem must implement IEntityWithRelationships
      Type parentItemType = parentItem.GetType();
      if( typeof( IEntityWithRelationships ).IsAssignableFrom( parentItemType ) )
      {
        // Since the relationship was based on the the property 
        // name, we must find that property using reflection.
        PropertyInfo propertyInfo = parentItemType.GetProperty( this.RelationName );

        if( propertyInfo != null )
        {
          RelatedEnd relatedEnd = propertyInfo.GetValue( parentItem, null ) as RelatedEnd;

          if( relatedEnd != null )
          {
            // Make sure that the details are loaded 
            // except if the user already handled it.
            if( !relatedEnd.IsLoaded 
              && !args.Handled 
              && entityObjectLoadable )
            {
              relatedEnd.Load();
            }

            IListSource listSource = relatedEnd as IListSource;

            // Returns an IList to have proper change notification events.
            if( listSource != null )
              return listSource.GetList();
          }
        }
      }

      return null;
    }
 protected virtual void OnQueryDetails( QueryEntityDetailsEventArgs e )
 {
   if( this.QueryDetails != null )
     this.QueryDetails( this, e );
 }