Example #1
0
        /// <summary>
        /// Indexer will return the corresponding renderer for the corresponding Key value.
        /// </summary>
        /// <param name="key"></param>
        /// <value></value>
        /// <remarks></remarks>
        public ITreeGridCellRenderer this[string key]
        {
            get
            {
                if (key == cachedKey)
                {
                    cachedRenderer.TreeGrid = this.treeGrid;
                    return(cachedRenderer);
                }

                cachedKey = key;
                if (!this.ContainsKey(key))
                {
                    cachedKey = key;
                    this.Add(cachedKey, cachedRenderer);
                }
                else
                {
                    cachedRenderer = (ITreeGridCellRenderer)content[key];
                }

                cachedRenderer.TreeGrid = this.treeGrid;
                return(cachedRenderer);
            }
            set
            {
                if (this.ContainsKey(key) && content[key] != value)
                {
                    this.Remove(key);
                }
                this.Add(key, value);
            }
        }
Example #2
0
 /// <summary>
 /// Clears the values in Renderer Dictionary.
 /// </summary>
 /// <remarks></remarks>
 public void Clear()
 {
     foreach (var obj in content.Values)
     {
         var renderer = obj as TreeGridCellRendererBase;
         if (renderer != null)
         {
             renderer.Dispose();
         }
     }
     this.content.Clear();
     cachedKey      = "";
     cachedRenderer = null;
 }
Example #3
0
 /// <summary>
 /// Remove the Renderer from dictionary for corresponding key vallue
 /// </summary>
 /// <param name="key"></param>
 /// <remarks></remarks>
 public void Remove(string key)
 {
     if (ContainsKey(key))
     {
         var renderer = content[key] as ITreeGridCellRenderer;
         if (renderer != null)
         {
             renderer.Dispose();
         }
         this.content.Remove(key);
     }
     cachedKey      = "";
     cachedRenderer = null;
 }
 /// <summary>
 /// Disposes all the resources used by the <see cref="Syncfusion.UI.Xaml.TreeGrid.TreeDataColumnBase"/> class.
 /// </summary>
 /// <param name="isDisposing">Indicates whether the call is from Dispose method or from a finalizer.</param>
 protected virtual void Dispose(bool disposing)
 {
     if (disposing)
     {
         if (this.ColumnElement is IDisposable)
         {
             (this.ColumnElement as IDisposable).Dispose();
         }
         if (this.renderer != null)
         {
             this.renderer.UnloadUIElements(this);
             this.renderer = null;
         }
         this.DataRow        = null;
         this.ColumnElement  = null;
         this.treeGridColumn = null;
     }
 }
Example #5
0
        /// <summary>
        /// Update Renderer and UnloadUIElement if needed
        /// </summary>
        /// <param name="dataColumn"></param>
        /// <returns></returns>
        /// <remarks></remarks>
        internal virtual bool UpdateRenderer(TreeDataColumnBase dataColumn, TreeGridColumn column)
        {
            ITreeGridCellRenderer newRenderer = null;
            var update = (dataColumn.TreeGridColumn.hasCellTemplateSelector || dataColumn.TreeGridColumn.hasCellTemplate) || (column.hasCellTemplate || column.hasCellTemplateSelector);

            if (this.TreeGrid.GetHeaderIndex() == dataColumn.RowIndex)
            {
                newRenderer = this.TreeGrid.CellRenderers["Header"];
                update      = dataColumn.TreeGridColumn.hasHeaderTemplate || column.hasHeaderTemplate;
            }
            else
            {
                newRenderer = column.CellType != string.Empty
                                  ? this.TreeGrid.CellRenderers[column.CellType]
                                  : this.TreeGrid.CellRenderers["Static"];
            }

            if (dataColumn.Renderer == null)
            {
                return(false);
            }

            //If both are different renderer then we will unload UIElements.
            //The column going to reuse and the column which uses the existing column when has CellTemplates
            // Existing Column  -   New Column     -   Action
            //  CellTemplate    -   CellTemplate    -   Unload
            //  CellTemplate    -   None            -   Unload
            //  None            -   CellTemplate    -   Unload
            //  None            -   None            -   Reuse
            // DataHeader will have same renderer always
            if (dataColumn.Renderer != newRenderer)
            {
                dataColumn.Renderer.UnloadUIElements(dataColumn);
                dataColumn.Renderer = newRenderer;
                return(true);
            }
            if (update)
            {
                dataColumn.Renderer.UnloadUIElements(dataColumn);
                return(true);
            }
            return(false);
        }
Example #6
0
        internal bool RaiseCellValidate(RowColumnIndex currentCellIndex, ITreeGridCellRenderer renderer, bool allowattributeValidation)
        {
            if (IsCurrentCellValidated)
            {
                return(true);
            }

            var dataRow = treeGrid.RowGenerator.Items.FirstOrDefault(item => item.RowIndex == currentCellIndex.RowIndex);

            if (dataRow == null)
            {
                return(false);
            }
            var columnBase = dataRow.VisibleColumns.FirstOrDefault(x => x.ColumnIndex == currentCellIndex.ColumnIndex);

            if (columnBase == null)
            {
                return(false);
            }
            renderer = renderer ?? columnBase.Renderer;

            if (renderer == null)
            {
                return(false);
            }

            //WPF-36608 - CurrenctCellvalidating event are not fired, when we select cell on treeGrid template column.
            if (!columnBase.Renderer.CanValidate())
            {
                SetCurrentCellValidated(true);
                return(true);
            }
            object oldValue = null;
            object changedNewValue;
            string errorMessage;

            oldValue = this.treeGrid.SelectionController.CurrentCellManager.oldCellValue;
            var newCellValue = renderer.GetControlValue();
            var treeNode     = treeGrid.View.Nodes.GetNode(dataRow.RowData);

            if (this.RaiseCurrentCellValidatingEvent(oldValue, newCellValue, columnBase.TreeGridColumn, out changedNewValue, currentCellIndex, columnBase.ColumnElement as FrameworkElement, out errorMessage, dataRow.RowData, treeNode))
            {
                bool isValid = true;
                if (newCellValue != changedNewValue)
                {
                    renderer.SetControlValue(changedNewValue);
                }
                if (allowattributeValidation)
                {
                    if ((columnBase.ColumnElement is TreeGridCell) && (columnBase.ColumnElement as TreeGridCell).Content != null && (columnBase.ColumnElement as TreeGridCell).Content is FrameworkElement)
                    {
                        renderer.UpdateSource((columnBase.ColumnElement as TreeGridCell).Content as FrameworkElement);
                    }
                    if (columnBase.TreeGridColumn.GridValidationMode != GridValidationMode.None)
                    {
                        isValid = this.treeGrid.ValidationHelper.ValidateColumn(dataRow.RowData, columnBase.TreeGridColumn.MappingName, (columnBase.ColumnElement as TreeGridCell), currentCellIndex) &&
                                  TreeGridDataValidation.Validate((columnBase.ColumnElement as TreeGridCell), columnBase.TreeGridColumn.MappingName, columnBase.ColumnElement.DataContext);
                    }
#if WPF
                    if (!isValid && columnBase.TreeGridColumn.GridValidationMode == GridValidationMode.InEdit)
                    {
                        return(false);
                    }
#endif
                }

                this.RaiseCurrentCellValidatedEvent(oldValue, columnBase.Renderer.GetControlValue(), columnBase.TreeGridColumn, errorMessage, dataRow.RowData, treeNode);
                SetCurrentCellValidated(true);
                return(true);
            }
            return(false);
        }
Example #7
0
 /// <summary>
 /// Add the Renderes to the Renderer dictionary.
 /// </summary>
 /// <param name="key"></param>
 /// <param name="renderer"></param>
 /// <remarks></remarks>
 public void Add(string key, ITreeGridCellRenderer renderer)
 {
     this.content.Add(key, renderer);
 }