Beispiel #1
0
        private DataTable GetDataTableForListItem(Constraint constraint)
        {
            CheckValidationObject(constraint);

            dependencyRelation = new DependencyRelations(constraint, collectionEntityInstance[numberRow]);

            return(dependencyRelation.SetRelationColumnsValue_GetReferenceTable(true, true)); //ReferenceTableDataSource;
        }
        public string Serialization(List <string> excelList)
        {
            var attributesElement = new XElement("attributes");

            entityInstance.RemoveAllValues();
            HeadXml();

            for (byte i = 0; i < column.Count; i++)
            {
                if (column[i] is TemplateField)
                {
                    var field = column[i] as TemplateField;
                    attributesElement.Add(
                        new XElement
                        (
                            "attribute",
                            new XAttribute("name", field.Attribute.FPath),
                            new XAttribute("alias", field.Attribute.Name),
                            new XAttribute("value", excelList[i]),
                            new XAttribute("allowNulls", field.Attribute.IsNullable),
                            new XAttribute("type", field.Attribute.SType),
                            new XAttribute("IsEditable", true),
                            new XAttribute("IsComputed", field.Attribute.IsComputed)
                        ));
                }
                else if (column[i] is Constraint)
                {
                    var value               = excelList[i];
                    var constraint          = column[i] as Constraint;
                    var dependencyRelations = new DependencyRelations(constraint, entityInstance);

                    dependencyRelations.NewEntityInstanceID = value;
                    dependencyRelations.SetRelationColumnsValueFromExcel_GetReferenceTable();
                }
            }

            new XMLRelationColumnsSerializer(entityInstance.RelationColumnsValue).Serialize(attributesElement, -1, -1);



            root.Add(attributesElement);

            return(root.ToString());
        }
Beispiel #3
0
        protected override int CreateChildControls(IEnumerable collection, bool dataBinding)
        {
            bool badSituation = false;


            if (collection != null && collection is DataView)
            {
                var bcont  = Storage.BusinessContentIsChanged;
                var dtview = DataView;


                //
                //if (Storage.BusinessContentIsChanged || DataView == null || EntityInstanceID == -1)
                if (!IsEditMode || DataView == null || Storage.BusinessContentIsChanged)
                {
                    DataView = collection as DataView;

                    Storage.BusinessContentIsChanged = false;

                    SessionContent.IsRemoveInstance = false;
                    SessionContent.IsInstanceAdded  = false;
                }

                AddRemoveRunTimeInstance();


                if (DataRow == null || !IsInternalDataBinding)
                {
                    ListFilterControls.Clear();
                    HeaderRow = null;
                    Reset(false);
                    DataRow = DataView.Table.Rows.OfType <DataRow>();
                }



                IsInternalDataBinding = false;

                table = new Table {
                    CellSpacing = 0, EnableViewState = false
                };
#if true
#else
                table.Width = Unit.Parse("100%");
#endif

                if (!string.IsNullOrEmpty(CssClass))
                {
                    table.CssClass = CssClass;
                }

                if (!badSituation)
                {
                    int tableWidth = 0;

                    table.Rows.Add(CreateHeaderRow(ref tableWidth));

                    table.Width = tableWidth;
                }
                var columnCount = Template.Fields.Count;

                var postBack = Page.IsPostBack;

                TrackPageIndex();

                DataView.RowFilter = GetFilterExpression(false);

                DataView.Sort = GetSortingExpression();

                if (DataView.RowFilter != "")
                {
                    foreach (var control in ListFilterControls)
                    {
                        var typeName = typeof(FilterControl).Name;

                        if (control.ID.Contains(typeName))
                        {
                            foreach (var item in SessionContent.ExpressionForSelectCheckBoxes)
                            {
                                if (item.Key.StartsWith(Template.ID.ToString()))
                                {
                                    var expression = SessionContent.ExpressionForSelectCheckBoxes[item.Key];

                                    var rows = DataView.Table.Select(expression.ToString());

                                    SelectFilterBoxItems(rows, control.AttributeID, (FilterControl)control);

                                    var filter4 = GetFilterExpression(false);

                                    DataView.RowFilter = GetFilterExpression(false);
                                }
                            }
                        }
                    }
                }


                IEnumerable <DataRowView> rowsInPage;

                if (AllowPaging)
                {
                    rowsInPage = DataView.OfType <DataRowView>().Skip(PageSize * PageIndex).Take(PageSize);
                }
                else
                {
                    rowsInPage = DataView.OfType <DataRowView>();
                }

                int index = 0;

                if (DataReady != null)
                {
                    DataReady(this, EventArgs.Empty);
                }


                var InstancesID = new StringBuilder();

                foreach (DataRowView rowInPage in rowsInPage)
                {
                    var rowID = rowInPage.Row["objID"];

                    var type1 = rowID.GetType();



                    if (rowID != DBNull.Value)
                    {
                        InstancesID.Append(string.Format("'{0}'{1}", rowID, ","));
                        //InstancesID.Append(string.Concat(rowID, ","));
                    }

                    var row = new TableRow
                    {
                        ClientIDMode = ClientIDMode.Static,
                        ID           = rowInPage.Row["objID"].ToString()
                    };
                    var entityID = Template.Entity.ID;

                    if (IsCardControl)
                    {
                        row.Attributes.Add("onclick", "switchSelectedRow(" + rowID + "," + entityID + "," + "null" + " )");
                    }
                    else
                    {
                        row.Attributes.Add("onclick", "switchSelectedRow(" + rowID + "," + entityID + "," + "false" + " )");
                    }


                    row.Attributes.Add("class", "AlternativeRow");


                    foreach (var field in Template.Fields.Where(f => f.IsForbidden == false))
                    //foreach (var field in Template.Fields)
                    {
                        if (field.IsVisible)
                        {
                            var cell = new TableCell();

                            WebControl TableCellContorl;
                            #region EditModeImplimetation
                            if (IsEditMode)
                            {
                                var sessionKey            = string.Concat("entityInstance", Template.Entity.SystemName, "_", rowInPage["objID"].ToString());
                                var isFoundEntityInstance = SessionContent.EntityInstances.FirstOrDefault(id => id.Key == sessionKey).Key;

                                if (!field.Attribute.IsComputed && field.Format.ID.ToString() == "0" && field.Attribute.SType != "Table" && !field.Attribute.FPath.Contains("/"))
                                {
                                    if (field.Attribute.Type.Description.HasFlag(TypeDescription.Logic))
                                    {
                                        var checkBoxControl = new CheckBoxControl();

                                        if (isFoundEntityInstance != null)
                                        {
                                            checkBoxControl.EntityInstance = SessionContent.EntityInstances[sessionKey];
                                        }

                                        TableCellContorl = (CheckBox)checkBoxControl.CreateControl(field, rowInPage, TemplateFieldIndices);
                                    }
                                    else if (field.Attribute.Type.Description.HasFlag(TypeDescription.Date))
                                    {
                                        var dateControl = new DateControl();

                                        if (isFoundEntityInstance != null)
                                        {
                                            dateControl.EntityInstance = SessionContent.EntityInstances[sessionKey];
                                        }

                                        TableCellContorl = (TextBox)dateControl.CreateControl(field, rowInPage, TemplateFieldIndices);
                                    }
                                    else if (field.Attribute.Type.Description.HasFlag(TypeDescription.Number) || field.Attribute.Type.Description.HasFlag(TypeDescription.Float))
                                    {
                                        var numberControl = new NumberControl();

                                        if (isFoundEntityInstance != null)
                                        {
                                            numberControl.EntityInstance = SessionContent.EntityInstances[sessionKey];
                                        }

                                        TableCellContorl = (TextBox)numberControl.CreateControl(field, rowInPage, TemplateFieldIndices);
                                    }
                                    else
                                    {
                                        var textAreaControl = new TextAreaControl();

                                        if (isFoundEntityInstance != null)
                                        {
                                            textAreaControl.EntityInstance = SessionContent.EntityInstances[sessionKey];
                                        }

                                        TableCellContorl = (TextBox)textAreaControl.CreateControl(field, rowInPage, TemplateFieldIndices);
                                    }
                                }
                                else if (field.Attribute.FPath.Contains("/"))
                                {
                                    //найти констраин, по имени поля
                                    var fPath      = field.Attribute.FPath;
                                    var indexOf    = fPath.IndexOf("/");
                                    var constrName = fPath.Substring(0, indexOf);
                                    var constraint = Template.Entity.Constraints.First(c => c.ConstraintName == constrName);

                                    if (!constraint.IsIdentified)
                                    {
                                        var buttonControl = new ButtonControl();

                                        if (isFoundEntityInstance != null)
                                        {
                                            buttonControl.EntityInstance = SessionContent.EntityInstances[sessionKey];
                                        }

                                        TableCellContorl           = (Button)buttonControl.CreateControl(field, rowInPage, TemplateFieldIndices);
                                        buttonControl.ButtonClick += new EventHandler <CreateReferenceTableControlEventArgs>(CreateReferenceTableControl);
                                    }
                                    else
                                    {
                                        var textAreaReadOnlyControl = new TextAreaReadOnlyControl();
                                        TableCellContorl = (TextBox)textAreaReadOnlyControl.CreateControl(field, rowInPage, TemplateFieldIndices);
                                    }
                                }
                                else
                                {
                                    var textAreaReadOnlyControl = new TextAreaReadOnlyControl();
                                    TableCellContorl = (TextBox)textAreaReadOnlyControl.CreateControl(field, rowInPage, TemplateFieldIndices);
                                }
                            }
                            #endregion
                            else
                            {
                                var textAreaReadOnlyControl = new TextAreaReadOnlyControl();
                                TableCellContorl = (TextBox)textAreaReadOnlyControl.CreateControl(field, rowInPage, TemplateFieldIndices);
                            }
                            cell.Controls.Add(TableCellContorl);

                            row.Cells.Add(cell);
                        }
                    }
                    table.Rows.Add(row);
                    index++;
                }
                #region таблица для навигации
                //таблица для навигационного контрола в которой присутствуют только титульные атрибуты
                if (DataView.Table.Rows.Count > 0)
                {
                    var filterExpression = string.Concat("objID in (", InstancesID, ")");



                    if (InstancesID.IsEmpty() || InstancesID.ToString() == "-1,")
                    {
                        filterExpression = "";
                    }

                    var dv = new DataView(DataView.Table);

                    //dv.RowFilter = "objID = '/174864732726964.178450254734968.3800770055/'";

                    dv.RowFilter = filterExpression;

                    DataTable TableWhitTitlesAttr = dv.ToTable();

                    var noTitlesIDAttr = Template.Entity.Attributes.Where(x => x.AppType != AppType.title && x.AppType != AppType.objid).Select(x => x.ID.ToString()).ToList();

                    foreach (var id in noTitlesIDAttr)
                    {
                        TableWhitTitlesAttr.Columns.Remove(id);
                    }
                    if (Page.Request.Path.IndexOf("XDynamicCard.aspx") > 0)
                    {
                        Page.Session["TableFromPage"]        = null;
                        Page.Session["instanceIDNavigation"] = null;
                    }
                    else
                    {
                        Page.Session["TableFromPage"]        = TableWhitTitlesAttr;
                        Page.Session["instanceIDNavigation"] = TableWhitTitlesAttr.Rows[0]["objID"];
                        var instID = TableWhitTitlesAttr.Rows[0]["objID"];
                    }
                }
                #endregion


                #region Кнопка для создания,удаления объектов

                var templateID = Template.ID.ToString();

                if (IsEditMode && PageIndex == PageCount - 1 && templateID.Contains("requireAttributesTemplate"))
                {
                    var newInstanceCell = new TableCell
                    {
                        ColumnSpan      = columnCount,
                        HorizontalAlign = HorizontalAlign.Left
                    };
                    var newInstanceRow = new TableRow();

                    var addRemoveInstanceControl = new AddRemoveInstanceControl();

                    addRemoveInstanceControl.IsRemoveInstance = SessionContent.IsRemoveInstance;

                    addRemoveInstanceControl.AddRemoveInstanceButtonClick += new EventHandler(addRemoveInstanceControl_addRemoveInstanceButtonClick);

                    newInstanceCell.Controls.Add(addRemoveInstanceControl);

                    newInstanceRow.Cells.Add(newInstanceCell);

                    this.table.Rows.Add(newInstanceRow);
                }


                #endregion

                CreateAggregationRow();

                if (AllowPaging && PageCount > 1)
                {
                    AddPager(columnCount);
                }

                Controls.Add(table);

                #region отображает выпадающий список из инстансов ссылки для текущего Entity

                if (DisplayReferenceTableControl)
                {
                    var field = (TemplateField)Page.Session["fieldForRefTableControl"];

                    var rowInPage = (DataRowView)Page.Session["rowInPageForRefTableControl"];

                    var constraints = Template.Entity.Constraints;

                    //Получить Instance parent объектa
                    var entityInstanceID = rowInPage["objID"].ToString();


                    var sessionKey = string.Concat("entityInstance", Template.Entity.SystemName, "_", entityInstanceID);

                    EntityInstance entityInstance;

                    var entityInstanceIsFound = SessionContent.EntityInstances.FirstOrDefault(key => key.Key == sessionKey).Key;

                    if (entityInstanceIsFound == null)
                    {
                        entityInstance             = new EntityInstance(entityInstanceID, Template.Entity.SystemName, true);
                        entityInstance.Constraints = constraints;
                        entityInstance.SetRelationColumnsValue();
                    }
                    //если instance был создан вне ReferenceTableControl и не имеет constrain & RelationColumnsValue
                    else if (entityInstanceIsFound != null && SessionContent.EntityInstances[sessionKey].DisplayReferenceTableControl == false)
                    {
                        entityInstance             = new EntityInstance(entityInstanceID, Template.Entity.SystemName, true);
                        entityInstance.Constraints = constraints;
                        entityInstance.SetRelationColumnsValue();
                        entityInstance.SelfColumnsValue = SessionContent.EntityInstances[sessionKey].SelfColumnsValue;
                    }
                    else
                    {
                        entityInstance = SessionContent.EntityInstances[sessionKey];
                    }



                    //найти констраин, по имени поля
                    var fPath      = field.Attribute.FPath;
                    var indexOf    = fPath.IndexOf("/");
                    var constrName = fPath.Substring(0, indexOf);
                    var constraint = Template.Entity.Constraints.First(c => c.ConstraintName == constrName);

                    //Получить ссылочную таблцу
                    DependencyRelations dependencyRelation = new DependencyRelations(constraint, entityInstance);

                    bool isCreate = false;

                    if (entityInstance.EntityInstanceID == "-1")
                    {
                        isCreate = true;
                    }

                    DataTable ReferenceTableDataSource = dependencyRelation.SetRelationColumnsValue_GetReferenceTable(true, isCreate);

                    var ReferenceTableControl = new ReferenceTableControl(Template.Entity, field, rowInPage);

                    ReferenceTableControl.DataSource = ReferenceTableDataSource;

                    ReferenceTableControl.SelectedIndexChanged += new EventHandler(ReferenceTableControl_SelectedIndexChanged);

                    ReferenceTableControl.CloseButtonClick += new EventHandler(ReferenceTableControl_CloseButtonClick);

                    Controls.Add(ReferenceTableControl);

                    //выбрать объект из ссылочной таблицы
                    if (ReferenceTableControl.EntityInstanceID != "")
                    {
                        dependencyRelation.NewEntityInstanceID          = ReferenceTableControl.EntityInstanceID;
                        dependencyRelation.RelationTableTitleAttributes = ReferenceTableControl.TableTitleAttributes;
                        dependencyRelation.SetRelationColumnsValue_GetReferenceTable(false);

                        SessionContent.EntityInstances[sessionKey] = entityInstance;

                        //закрыть конрол
                        Page.Session["fieldForRefTableControl"]     = null;
                        Page.Session["rowInPageForRefTableControl"] = null;
                        DisplayReferenceTableControl           = false;
                        ReferenceTableControl.EntityInstanceID = "";

                        DataBind();
                    }
                }
                #endregion
            }

            return(0);
        }