private void RelationshipSubMenu_MenuClicked(object sender, EventArgs e, RelationshipMenu rel, MyDataObject DataReportItem, DP_SearchRepository searchRepository)
 {
     //if (rel.Item1 == DataReportRelationshipType.Relationship)
     //{
     //var searchRepository = AgentUICoreMediator.GetAgentUICoreMediator.RelationshipManager.GetSearchDataItemByRelationship(DataReportItem.DataItem, rel.Item2, AgentUICoreMediator.GetAgentUICoreMediator.GetRequester());
     if (RelatedDataReportArearequested != null)
     {
         RelatedDataReportArearequested(this, new DataReportAreaRequestedArg()
         {
             EntitiyID = rel.EntityID, Relationship = rel.Relationship, RelationshipTail = rel.EntityRelationshipTail, Title = rel.EntityName, SourceDataReportItem = DataReportItem, SearchRepository = searchRepository
         });
     }
     //}
 }
        private void SetRelationshipMenus(List <DataReportMenu> result, MyDataObject DataReportItem)
        {//با فرم ویو یک فانکشن شود
            List <RelationshipMenu> listRelationships = new List <RelationshipMenu>();

            if (EntityDataView != null && EntityDataView.EntityDataViewRelationships.Any())
            {
                foreach (var rel in EntityDataView.EntityDataViewRelationships)
                {
                    //if (rel.RelationshipID != 0)
                    //{

                    //    var relationship = AgentUICoreMediator.GetAgentUICoreMediator.RelationshipManager.GetRelationship(rel.RelationshipID);
                    //    var relationshipMenu = new RelationshipMenu(relationship, relationship.EntityID2
                    //    , relationship.Entity2, relationship.Alias, rel.Group1, rel.Group2);
                    //    listRelationships.Add(relationshipMenu);
                    //}
                    if (rel.RelationshipTailID != 0)
                    {
                        var relationshipTail = AgentUICoreMediator.GetAgentUICoreMediator.RelationshipManager.GetRelationshipTail(rel.RelationshipTailID, false);
                        var relationshipMenu = new RelationshipMenu(relationshipTail, relationshipTail.TargetEntityID
                                                                    , relationshipTail.TargetEntityAlias, relationshipTail.EntityPath, rel.Group1, rel.Group2);
                        listRelationships.Add(relationshipMenu);
                    }
                }
            }
            else
            {
                //var allRelationships = AgentUICoreMediator.GetAgentUICoreMediator.RelationshipManager.GetRelationshipsByEntityID(DataReportItem.DataItem.TargetEntityID);
                var allRelationships = Entity.Relationships;
                foreach (var relationship in allRelationships)
                {
                    var relationshipMenu = new RelationshipMenu(relationship, relationship.EntityID2
                                                                , relationship.Entity2, relationship.Alias, "", "");
                    listRelationships.Add(relationshipMenu);
                }
                var allRelationshipTails = AgentUICoreMediator.GetAgentUICoreMediator.RelationshipManager.GetRelationshipTails(DataReportItem.DataItem.TargetEntityID);
                foreach (var relationshipTail in allRelationshipTails)
                {
                    var relationshipMenu = new RelationshipMenu(relationshipTail, relationshipTail.TargetEntityID
                                                                , relationshipTail.TargetEntityAlias, relationshipTail.EntityPath, "", "");
                    listRelationships.Add(relationshipMenu);
                }
            }
            foreach (var rel in listRelationships)
            {
                if (rel.RelType == DataReportRelationshipType.Relationship)
                {
                    if (AreaInitializer.CausingRelationship == null || AreaInitializer.CausingRelationship.PairRelationshipID != rel.Relationship.ID)
                    {
                        var searchRepository = AgentUICoreMediator.GetAgentUICoreMediator.RelationshipDataManager.GetSearchDataItemByRelationship(RelationshipSreachType.SecondSideBasedOnFirstRelationshhipColumn, DataReportItem.DataItem, rel.Relationship.ID);
                        if (searchRepository != null)
                        {
                            var requester = AgentUICoreMediator.GetAgentUICoreMediator.GetRequester();
                            //سکوریتی داده اعمال میشود
                            var existsRequest = new DR_SearchExistsRequest(requester);
                            existsRequest.EntityID        = rel.EntityID;
                            existsRequest.SearchDataItems = searchRepository;
                            var exists = AgentUICoreMediator.GetAgentUICoreMediator.requestRegistration.SendSearchExistsRequest(existsRequest);
                            if (exists.ExistsResult)
                            {
                                rel.SearchRepository = searchRepository;
                                rel.IsValid          = true;
                            }
                        }
                    }
                }
            }

            var validRelationships = listRelationships.Where(x => x.IsValid);

            if (validRelationships.Any())
            {
                var relationshipMenu = new DataReportMenu();
                relationshipMenu.Title = "روابط";
                relationshipMenu.Type  = DataReportMenuType.Relationship;
                result.Add(relationshipMenu);

                if (EntityDataView == null || !EntityDataView.EntityDataViewRelationships.Any())
                {
                    if (validRelationships.Count() > 8)
                    {
                        int index = 1;
                        foreach (var item in validRelationships)
                        {
                            var cIndex = index / 5;
                            item.Group1 = "Group" + (cIndex + 1);
                            index++;
                        }
                    }
                }

                foreach (var item in validRelationships.GroupBy(x => new { x.Group1, x.Group2 }))
                {
                    List <DataReportMenu> parentCollection = null;
                    if (string.IsNullOrEmpty(item.Key.Group1))
                    {
                        parentCollection = relationshipMenu.SubMenus;
                    }
                    else
                    {
                        DataReportMenu menuLevel1 = GetOrCreateMenu1(relationshipMenu.SubMenus, item.Key.Group1);
                        parentCollection = menuLevel1.SubMenus;
                    }
                    if (string.IsNullOrEmpty(item.Key.Group2))
                    {
                        //   parentCollection = parentCollection;
                    }
                    else
                    {
                        DataReportMenu menuLevel2 = GetOrCreateMenu1(parentCollection, item.Key.Group2);
                        parentCollection = menuLevel2.SubMenus;
                    }

                    foreach (var rel in item)
                    {
                        var relationshipSubMenu = new DataReportMenu();
                        relationshipSubMenu.Title        = rel.EntityName;
                        relationshipSubMenu.Tooltip      = rel.Tooltip;
                        relationshipSubMenu.MenuClicked += (sender, e) => RelationshipSubMenu_MenuClicked(sender, e, rel, DataReportItem, rel.SearchRepository);
                        parentCollection.Add(relationshipSubMenu);
                    }
                }
            }
        }