コード例 #1
0
        /// <summary>
        /// Disposes all the resources used by the <see cref="Syncfusion.UI.Xaml.Grid.DataColumnBase"/> class.
        /// </summary>
        /// <param name="isDisposing">Indicates whether the call is from Dispose method or from a finalizer.</param>
        protected virtual void Dispose(bool isDisposing)
        {
            if (isdisposed)
            {
                return;
            }
            if (isDisposing)
            {
                if (this.renderer != null)
                {
                    this.renderer.UnloadUIElements(this);
                    this.renderer = null;
                }

                if (this.ColumnElement is IDisposable)
                {
                    (this.ColumnElement as IDisposable).Dispose();
                }

#if WPF
                if (this.ColumnElement != null)
                {
                    this.ColumnElement.CommandBindings.Clear();
                }
#endif
                this.ColumnElement       = null;
                this.SelectionController = null;
                this.gridColumn          = null;
            }
            isdisposed = true;
        }
コード例 #2
0
        public GridColumn(Expression <Func <T, TDataType> > expression, Grid <T> grid)
        {
            #region Setup defaults

            EncodeEnabled   = true;
            ExportEnabled   = true;
            SortEnabled     = false;
            SanitizeEnabled = true;

            _filterWidgetTypeName = PropertiesHelper.GetUnderlyingType(typeof(TDataType)).FullName;
            _grid = grid;

            _cellRenderer = new GridCellRenderer();

            #endregion

            if (expression != null)
            {
                var expr = expression.Body as MemberExpression;
                if (expr == null)
                {
                    throw new ArgumentException(
                              string.Format("Expression '{0}' must be a member expression", expression),
                              "expression");
                }

                _constraint = expression.Compile();
                _orderers.Insert(0, new OrderByGridOrderer <T, TDataType>(expression));
                _filter = new DefaultColumnFilter <T, TDataType>(expression);
                //Generate unique column name:
                Name  = PropertiesHelper.BuildColumnNameFromMemberExpression(expr);
                Title = Name; //Using the same name by default
            }
        }
コード例 #3
0
        /// <summary>
        /// Indexer will return the correspoding renderer for the corresponding Key value.
        /// </summary>
        /// <param name="key"></param>
        /// <value></value>
        /// <remarks></remarks>
        public IGridCellRenderer this[string key]
        {
            get
            {
                if (key == cachedKey)
                {
                    cachedRenderer.DataGrid = this.dataGrid;
                    return(cachedRenderer);
                }

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

                cachedRenderer.DataGrid = this.dataGrid;
                return(cachedRenderer);
            }
            set
            {
                if (this.ContainsKey(key) && content[key] != value)
                {
                    this.Remove(key);
                }
                this.Add(key, value);
            }
        }
コード例 #4
0
 /// <summary>
 /// Clears the values in Renderer Dictionary.
 /// </summary>
 /// <remarks></remarks>
 public void Clear()
 {
     foreach (var obj in content.Values)
     {
         var renderer = obj as GridCellRendererBase;
         if (renderer != null)
         {
             renderer.Dispose();
         }
     }
     this.content.Clear();
     cachedKey      = "";
     cachedRenderer = null;
 }
コード例 #5
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 IGridCellRenderer;
         if (renderer != null)
         {
             renderer.Dispose();
         }
         this.content.Remove(key);
     }
     cachedKey      = "";
     cachedRenderer = null;
 }
コード例 #6
0
        /// <summary>
        /// Gets the corresponding renderer for the given GridColumn.
        /// </summary>
        /// <param name="dc"></param>
        /// <param name="column"></param>
        /// <returns></returns>
        protected IGridCellRenderer GetRenderer(GridColumn column)
        {
            IGridCellRenderer renderer = null;

            if (this.DataGrid.FilterRowCellRenderers.ContainsKey(column.FilterRowEditorType))
            {
                renderer = this.DataGrid.FilterRowCellRenderers[column.FilterRowEditorType];
            }
            else
            {
                renderer = this.DataGrid.FilterRowCellRenderers["TextBox"];
            }

            return(renderer);
        }
コード例 #7
0
        /// <summary>
        /// Update Renderer and UnloadUIElement if needed
        /// </summary>
        /// <param name="dataColumn"></param>
        /// <returns></returns>
        /// <remarks></remarks>
        internal override bool UpdateRenderer(DataColumnBase dataColumn, GridColumn column)
        {
            IGridCellRenderer newRenderer = this.GetRenderer(column);

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

            if (dataColumn.Renderer != newRenderer)
            {
                dataColumn.Renderer.UnloadUIElements(dataColumn);
                dataColumn.Renderer = newRenderer;
                return(true);
            }
            return(false);
        }
コード例 #8
0
        public GridColumn(Expression <Func <T, TDataType> > expression, Grid <T> grid)
        {
            #region Setup defaults

            EncodeEnabled       = true;
            SortEnabled         = false;
            SanitizeEnabled     = true;
            AggregateValue      = GridAggregateFunction.None;
            AggregateResult     = new GridCell("");
            PageAggregateResult = new GridCell("");

            ColumnType = PropertiesHelper.GetUnderlyingType(typeof(TDataType));

            _filterWidgetTypeName = PropertiesHelper.GetUnderlyingType(typeof(TDataType)).FullName;
            _grid = grid;

            _cellRenderer = new GridCellRenderer();

            #endregion

            if (expression != null)
            {
                var expr = expression.Body as MemberExpression;
                if (expr == null)
                {
                    throw new ArgumentException(
                              string.Format("Expression '{0}' must be a member expression", expression),
                              "expression");
                }

                _constraint = expression.Compile();
                _orderers.Insert(0, new OrderByGridOrderer <T, TDataType>(expression));
                _filter = new DefaultColumnFilter <T, TDataType>(expression);
                //Generate unique column name:
                Name  = PropertiesHelper.BuildColumnNameFromMemberExpression(expr);
                Title = Name; //Using the same name by default

                if (!String.IsNullOrEmpty(Name))
                {
                    ToolTip = Title.Substring(Name.LastIndexOf(".") + 1);
                }
            }
        }
コード例 #9
0
        public HiddenGridColumn(Expression <Func <T, TDataType> > expression, IGrid grid)
        {
            _grid         = grid;
            _cellRenderer = new GridHiddenCellRenderer();
            SortEnabled   = false;

            if (expression != null)
            {
                var expr = expression.Body as MemberExpression;
                if (expr == null)
                {
                    throw new ArgumentException(
                              string.Format("Expression '{0}' must be a member expression", expression),
                              "expression");
                }

                _constraint = expression.Compile();

                Name = PropertiesHelper.BuildColumnNameFromMemberExpression(expr);
            }
        }
コード例 #10
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, IGridCellRenderer renderer)
 {
     this.content.Add(key, renderer);
 }
コード例 #11
0
        internal bool RaiseCellValidate(RowColumnIndex currentCellIndex, IGridCellRenderer renderer, bool allowattributeValidation)
        {
            if (IsCurrentCellValidated)
            {
                return(true);
            }

#if WinRT || UNIVERSAL
            // In winrt and universal , the datagrid is from click notification. where we need to call parent validation to raise the cell validation for child grid.
            //In Multiple SelectionMode, the SelectedDetailsViewDataGrid will be null when navigating through CurrentCell, hence we have added the condition by checking CurrentCell.
            if (dataGrid is DetailsViewDataGrid && !dataGrid.SelectionController.CurrentCellManager.HasCurrentCell)
            {
                var parentDataGrid = dataGrid.GetParentDataGrid();
                if (parentDataGrid.SelectedDetailsViewGrid == null || (parentDataGrid.SelectedDetailsViewGrid != null && dataGrid != parentDataGrid.SelectedDetailsViewGrid))
                {
                    return(parentDataGrid.ValidationHelper.RaiseCellValidate(parentDataGrid.SelectionController.CurrentCellManager.CurrentRowColumnIndex, null, true));
                }
            }
#endif
            if (dataGrid.IsInDetailsViewIndex(currentCellIndex.RowIndex))
            {
                if (dataGrid.SelectionController is GridBaseSelectionController)
                {
                    var currentDetailsViewGrid = (dataGrid.SelectionController as GridBaseSelectionController).GetCurrentDetailsViewGrid(dataGrid);
                    return(currentDetailsViewGrid.ValidationHelper.RaiseCellValidate(currentDetailsViewGrid.SelectionController.CurrentCellManager.CurrentRowColumnIndex, null, true));
                }
            }
            // WPF-34211 - Need to avoid the row taken from RowGenerator items when the current row index is -1.
            var dataRow = dataGrid.RowGenerator.Items.FirstOrDefault(item => item.RowIndex == currentCellIndex.RowIndex && currentCellIndex.RowIndex != -1);
            if (dataRow == null)
            {
                return(false);
            }
            // WPF-34211 - Need to avoid the column taken from VisibleColumns when the current column index is -1.
            var columnBase = dataRow.VisibleColumns.FirstOrDefault(x => x.ColumnIndex == currentCellIndex.ColumnIndex && currentCellIndex.ColumnIndex != -1);
            if (columnBase == null)
            {
                return(false);
            }
            renderer = renderer ?? columnBase.Renderer;

            if (renderer == null)
            {
                return(false);
            }
            if (IsFocusSetBack)
            {
                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;
            if (this.dataGrid.SelectionController is GridBaseSelectionController)
            {
                oldValue = (this.dataGrid.SelectionController as GridBaseSelectionController).CurrentCellManager.oldCellValue;
            }
            var newCellValue = renderer.GetControlValue();
            if (this.RaiseCurrentCellValidatingEvent(oldValue, newCellValue, columnBase.GridColumn, out changedNewValue, currentCellIndex, columnBase.ColumnElement as FrameworkElement, out errorMessage, dataRow.RowData))
            {
                bool isValid = true;
                if (newCellValue != changedNewValue)
                {
                    renderer.SetControlValue(changedNewValue);
                }
                if (allowattributeValidation && this.dataGrid.MergedCellManager.CanRasieEvent)
                {
                    if ((columnBase.ColumnElement is GridCell) && (columnBase.ColumnElement as GridCell).Content != null && (columnBase.ColumnElement as GridCell).Content is FrameworkElement)
                    {
                        renderer.UpdateSource((columnBase.ColumnElement as GridCell).Content as FrameworkElement);
                    }
                    if (columnBase.GridColumn.GridValidationMode != GridValidationMode.None)
                    {
                        isValid = this.dataGrid.ValidationHelper.ValidateColumn(dataRow.RowData, columnBase.GridColumn.MappingName, (columnBase.ColumnElement as GridCell), currentCellIndex) &&
                                  DataValidation.Validate((columnBase.ColumnElement as GridCell), columnBase.GridColumn.MappingName, columnBase.ColumnElement.DataContext);
                    }
#if !WinRT && !UNIVERSAL
                    if (!isValid && columnBase.GridColumn.GridValidationMode == GridValidationMode.InEdit)
                    {
                        return(false);
                    }
#endif
                }
                if (this.dataGrid.MergedCellManager.CanRasieEvent)
                {
                    this.RaiseCurrentCellValidatedEvent(oldValue, columnBase.Renderer.GetControlValue(), columnBase.GridColumn, errorMessage, dataRow.RowData);
                }
                SetCurrentCellValidated(true);
                return(true);
            }
            return(false);
        }