/// <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; }
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 } }
/// <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); } }
/// <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; }
/// <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; }
/// <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); }
/// <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); }
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); } } }
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); } }
/// <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); }
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); }