private DataTable GetDataTableForListItem(Constraint constraint) { CheckValidationObject(constraint); dependencyRelation = new DependencyRelations(constraint, collectionEntityInstance[numberRow]); return(dependencyRelation.SetRelationColumnsValue_GetReferenceTable(true, true)); //ReferenceTableDataSource; }
// Запись в определенную ячейку информацию public void SetCellValue(string value) { try { Globals.ThisAddIn.Application.ActiveSheet.Cells(numberRow, numberColumn).Value = value; if (fieldType == FieldType.Constraint) { dependencyRelation.NewEntityInstanceID = GetObjID(value); dependencyRelation.SetRelationColumnsValue_GetReferenceTable(false, true); if (!String.IsNullOrEmpty(dependencyRelation.CleanableConstraint)) { CleareValueConstraint(); } } } catch (Exception) { MessageBox.Show("Не удалось сохранить значение, попробуйте снова."); } }
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); }