/// <summary> /// Genera las columnas del gridpanel. /// </summary> /// <param name="gp"></param> public void ObjectToGridPanel(ref Ext.Net.GridPanel gp) { foreach (Atributos a in armador.Atributos) { TypeCode tc = GetTypeCode(a.Tipo); Ext.Net.ColumnBase.Config cf; switch (tc) { case TypeCode.Boolean: { if (!a.Columna.ValoresFijos) cf = new Ext.Net.CheckColumn.Config(); else cf = new Ext.Net.Column.Config(); } break; case TypeCode.DateTime: { cf = new Ext.Net.DateColumn.Config() { Format = a.Columna.Formato.Valor }; } break; default: cf = new Ext.Net.Column.Config(); break; } if(armador.EsIdentificador(a)) { cf.ColumnID = a.Nombre; } cf.Editable = !a.Autogenerado; cf.DataIndex = a.Nombre; cf.Header = a.Columna.Titulo; Ext.Net.ColumnBase col; switch (tc) { case TypeCode.Boolean: { if (!a.Columna.ValoresFijos) { col = new Ext.Net.CheckColumn((Ext.Net.CheckColumn.Config)cf); } else { col = new Ext.Net.Column((Ext.Net.Column.Config)cf); col.Editor.Add(GenerarCampoCombo(a.Columna.Valores)); } } break; case TypeCode.DateTime: { col = new Ext.Net.DateColumn((Ext.Net.DateColumn.Config)cf); col.Editor.Add(GenerarCampo(tc)); } break; default: { col = new Ext.Net.Column((Ext.Net.Column.Config)cf); if (!a.Autogenerado) { // Si no es una relación if (a.Relacion == null) { if (!a.Columna.ValoresFijos) { col.Editor.Add(GenerarCampo(tc)); } else { col.Editor.Add(GenerarCampoCombo(a.Columna.Valores)); } if (a.EsLetra == true) { Ext.Net.UX.InputTextMask mascara = new InputTextMask(); mascara.Mask = "L"; col.Editor.Editor.Plugins.Add(mascara); } if (a.EsCuit == true) { Ext.Net.UX.InputTextMask mascara = new InputTextMask(); mascara.Mask = "99-99999999-9"; col.Editor.Editor.Plugins.Add(mascara); } if (a.EsDni == true) { Ext.Net.UX.InputTextMask mascara = new InputTextMask(); mascara.Mask = "99.999.999"; col.Editor.Editor.Plugins.Add(mascara); } if (a.EsImporte == true) { Ext.Net.UX.InputTextMask mascara = new InputTextMask(); mascara.Mask = "$99999999"; col.Editor.Editor.Plugins.Add(mascara); } if (a.EsMail == true) { Ext.Net.UX.InputTextMask mascara = new InputTextMask(); mascara.Mask.Contains("@"); col.Editor.Editor.Plugins.Add(mascara); } if (a.EsNumerico == true) { Ext.Net.UX.InputTextMask mascara = new InputTextMask(); mascara.Mask = "99999999999"; col.Editor.Editor.Plugins.Add(mascara); } if (a.EsPorcentaje == true) { Ext.Net.UX.InputTextMask mascara = new InputTextMask(); mascara.Mask = "999%"; col.Editor.Editor.Plugins.Add(mascara); } } else // Si ES una relación { List<CustomValue> valores = new List<CustomValue>(); if (a.Relacion.PermitirNull) valores.Add(new CustomValue("", null)); foreach (object o in a.Relacion.Resultados2) { bool match = true; var atributos = (IList<Atributos>)o; if (ValoresCombo != null) { foreach (SqlValor v in ValoresCombo) { foreach (Atributos atr in atributos) { if (v.Nombre.Equals(atr.Nombre)) { if (!v.Valor.ToString().Equals(atr.Valor.ToString())) // Bugfix haciendo comparación con strings, porque me pasaba que al comparar 1 != 1 decia true... { match = false; break; } } } if (!match) break; } } if (match) { valores.Add(new CustomValue( atributos[a.Relacion.CampoSecundario].Valor.ToString(), atributos[a.Relacion.CampoId].Valor)); } //var atributos = (object[])o; //valores.Add(new CustomValue(atributos[a.Relacion.CampoSecundario].ToString(), atributos[a.Relacion.CampoId])); } col.Editor.Add(GenerarCampoCombo(valores.ToArray())); } } } break; } col.Hidden = !a.Columna.Visible; gp.ColumnModel.Columns.Add(col); } }
private void BindGrid2Columns() { /* * Создание окна поиска */ Ext.Net.Toolbar bar = new Ext.Net.Toolbar(); bar.Layout = "hbox"; using (ContentDomain provider = Aspect.Model.Common.GetContentDomain(ClassifiacationTypeView)) { //List<SearchExpression> source = new List<SearchExpression>(); //List<IUserField> dictColumns = provider.GetUserFields(this.User.ID, RequestClassificationTreeID, FieldPlaceHolder.Grid); //List<UserProperty> columns = provider.GetUserPropertyColumns(this.User.ID, RequestClassificationTreeID, FieldPlaceHolder.Grid); // получаем пользовательские колонки для данного класса List<GridColumn> columns = provider.GetGridColumns(this.User.ID, RequestClassificationTreeID, FieldPlaceHolder.Grid); // извлекаем ширины колонок для данного класса List<ColumnWidth> columnWidths = provider.ColumnWidths.Where(p => p.ClassificationTreeID == RequestClassificationTreeID && p.UserID == this.User.ID).ToList(); List<GridColumn> gridColumns = provider.GetGridColumns(this.User.ID, RequestClassificationTreeID, FieldPlaceHolder.Grid); foreach (var column in gridColumns) { string fieldName = column.IsDictionary ? String.Format("{1} - {0}", column.Name, column.Group) : column.Name; /*IEnumerable<SearchExpression> list = this.SearchConditions.Where(s => s.FieldID == column.ID); source.Add(new SearchExpression() { FieldValue = list.Count() > 0 ? list.First().FieldValue : string.Empty, FieldName = fieldName, FieldID = column.ID, Order = column.Order });*/ AddSearchPanel(SearchWindow, fieldName, column.IsDictionary ? column.ID : column.SourceID, column.GridColumnType); } /* * Создание списка колонок в гриде продуктов */ foreach (GridColumn column in columns) { Ext.Net.ColumnBase newColumn; switch (column.GridColumnType) { case TypeEnum.Boolean: newColumn = new Ext.Net.CheckColumn(); break; default: newColumn = new Ext.Net.Column(); break; } newColumn.ColumnID = column.ID.ToString(); foreach (int width in columnWidths.Where(p => p.ColumnID == column.ID).Select(p => p.Width)) { newColumn.Width = width; } newColumn.Header = column.Alias; newColumn.Tooltip = column.IsDictionary ? String.Format("{0} :: {1}", column.Group, column.Name) : column.Name; newColumn.DataIndex = String.Format("{0}|{1}", column.OrderExpression, column.GridColumnType.ToString()); newColumn.Hideable = false; this.GridPanel1.ColumnModel.Columns.Add(newColumn); Store1.AddField(new Ext.Net.RecordField(newColumn.DataIndex)); } // adding another field Store1.AddField(new Ext.Net.RecordField("ID")); Store1.AddField(new Ext.Net.RecordField("CID")); } }
/*private void BindGridColumns() { using (EditConfigurationProvider provider = new EditConfigurationProvider()) { Aspect.Domain.Product prod = provider.GetProduct(this.ProductID); if (prod == null) return; this.Title = HeaderLiteral.Text = string.Format(HeaderLiteral.Text, prod.PublicName, prod.Version == null ? string.Empty : prod.Version.ToString()); HeaderDateLiteral.Text = string.Format(HeaderDateLiteral.Text, DateTime.Now.ToShortDateString(), DateTime.Now.ToLongTimeString()); //--- SelectorProductGridField selector = new SelectorProductGridField(string.Empty, "ConfigurationID", true); selector.ItemStyle.Width = new Unit(15, UnitType.Pixel); EditConfigurationGrid.Columns.Add(selector); //--- bool actionColumnAdded = false; List<GridColumn> list = provider.GetGridColumns(); foreach (GridColumn item in list) { BoundField field = null; EditableGridColumn editableColumn = item as EditableGridColumn; if (editableColumn == null) { if (item.GridColumnType == TypeEnum.Boolean) { field = new BooleanGridField(); field.DataField = item.DataItem; field.HeaderText = item.Name; field.ReadOnly = true; } else { if (!actionColumnAdded) { field = new ActionProductGridField(item.Name, item.DataItem); actionColumnAdded = true; } else { field = new ProductGridField(item.Name, item.DataItem); } field.ItemStyle.Font.Size = new FontUnit(FontSize.Smaller); } //field = new ActionProductGridField(item.Name, item.DataItem); } else { if (editableColumn.View == EditableGridColumn.GridColumnView.TextBox) { field = new TextBoxProductGridField(editableColumn); } else if (editableColumn.View == EditableGridColumn.GridColumnView.DropDown) { field = new DropDownProductGridField(editableColumn); } else if (editableColumn.View == EditableGridColumn.GridColumnView.CheckBox) { field = new CheckBoxProductGridField(editableColumn); } } if (field != null) { EditConfigurationGrid.Columns.Add(field); //EditAddedConfigurationGrid.Columns.Add(field); } } } }*/ private void BindGridColumns2() { using (EditConfigurationProvider provider = new EditConfigurationProvider()) { Aspect.Domain.Product prod = provider.GetProduct(this.ProductID); if (prod == null) return; this.Title = HeaderLiteral.Text = string.Format(HeaderLiteral.Text, prod.PublicName, prod.Version == null ? string.Empty : prod.Version.ToString()); HeaderDateLiteral.Text = string.Format(HeaderDateLiteral.Text, DateTime.Now.ToShortDateString(), DateTime.Now.ToLongTimeString()); // извлекаем ширины колонок для данного класса List<ColumnWidth> columnWidths = provider.ColumnWidths.Where(p => p.ClassificationTreeID == new Guid("11110000-0000-0000-0000-000011110001") && p.UserID == this.User.ID).ToList(); List<GridColumn> list = provider.GetGridColumns(); // sort columns by user's order list = list.OrderBy(clm => columnWidths.Exists(w => w.ColumnID == clm.ID) ? columnWidths.Single(w => w.ColumnID == clm.ID).Index : Int32.MaxValue).ToList(); foreach (GridColumn column in list) { Ext.Net.ColumnBase extjsColumn = null; EditableGridColumn editableColumn = column as EditableGridColumn; if (editableColumn == null) { if (column.GridColumnType == TypeEnum.Boolean) { extjsColumn = new Ext.Net.CheckColumn(); extjsColumn.DataIndex = column.DataItem; extjsColumn.Header = column.Name; } else { extjsColumn = new Ext.Net.Column(); extjsColumn.DataIndex = column.DataItem; extjsColumn.Header = column.Name; } } else { if (editableColumn.View == EditableGridColumn.GridColumnView.TextBox) { extjsColumn = new Ext.Net.Column(); if (editableColumn.Type == typeof(int) || editableColumn.Type == typeof(decimal)) { Ext.Net.TextField field = new Ext.Net.TextField(); field.Regex = @"^\d+(,\d+)?$"; field.RegexText = "0"; extjsColumn.Editor.Add(field); } else { extjsColumn.Editor.Add(new Ext.Net.TextField()); } extjsColumn.DataIndex = column.DataItem; extjsColumn.Header = column.Name; extjsColumn.Editable = true; } else if (editableColumn.View == EditableGridColumn.GridColumnView.DropDown) { extjsColumn = new Ext.Net.Column(); extjsColumn.DataIndex = column.DataItem; extjsColumn.Header = column.Name; extjsColumn.Editable = true; StringBuilder renderFunction = new StringBuilder(); renderFunction.AppendLine("function(value){"); Ext.Net.ComboBox field = new Ext.Net.ComboBox(); field.Editable = false; foreach (Pair<Guid, string> itemDropList in (editableColumn.DataSource.DataSource as List<Pair<Guid, string>>)) { field.Items.Add(new Ext.Net.ListItem(itemDropList.Second, itemDropList.First.ToString())); renderFunction.AppendFormat("if (value=='{0}') return '{1}';\n", itemDropList.First.ToString(), itemDropList.Second); } renderFunction.AppendLine("return 'error'; }"); extjsColumn.Editor.Add(field); extjsColumn.Renderer.Handler = renderFunction.ToString(); } else if (editableColumn.View == EditableGridColumn.GridColumnView.CheckBox) { extjsColumn = new Ext.Net.CheckColumn(); extjsColumn.DataIndex = column.DataItem; extjsColumn.Header = column.Name; extjsColumn.Editable = true; extjsColumn.Editor.Add(new Ext.Net.Checkbox()); } } if (extjsColumn != null) { // setting visibility column extjsColumn.Hidden = columnWidths.Exists(w => w.ColumnID == column.ID) ? columnWidths.Single(w => w.ColumnID == column.ID).Hidden : false; extjsColumn.ColumnID = column.ID.ToString(); foreach (int width in columnWidths.Where(p => p.ColumnID == column.ID).Select(p => p.Width)) { extjsColumn.Width = width; } Store1.AddField( new Ext.Net.RecordField(extjsColumn.DataIndex)); GridPanel.ColumnModel.Columns.Add(extjsColumn); } } // дополнительные поля Store1.AddField(new Ext.Net.RecordField("ID")); Store1.AddField(new Ext.Net.RecordField("CID")); Store1.AddField(new Ext.Net.RecordField("ConfID")); } }