Ejemplo n.º 1
0
        /// <summary>
        /// Make propertly content for columns that consist controls
        /// </summary>
        /// <param name="sender">DataGrid as object</param>
        /// <param name="e">DataGridAutoGeneratingColumnEventArgs</param>
        protected void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {
            ExtendedDataColumn column = GetColumn(sender, e.PropertyName);

            e.Column.Header = column.Caption;

            switch (column.ColumnType)
            {
            case ColumnType.Label:
                SetContentColumn(e);
                break;

            case ColumnType.ComboBox:
                SetContentColumn(e);
                break;

            case ColumnType.Button:
                SetContentColumn(e);
                break;

            case ColumnType.Text:
            case ColumnType.CheckBox:
            default:
                break;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Get a DataColumn for each property based on the property type & attribute
        /// </summary>
        /// <param name="prop">a property in the class</param>
        /// <returns></returns>
        private ExtendedDataColumn GetDataColumn(PropertyInfo prop)
        {
            ColumnType columnType = GetColumnType(prop);
            Type       dataType   = GetColumnDataType(columnType);
            var        dataColumn = new ExtendedDataColumn(prop.Name, prop.PropertyType, dataType, columnType);

            dataColumn.Caption = GetPropertyDisplayName(prop);

            return(dataColumn);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Custom Sort for DataGrid
        /// Although the DataGrid has sorting capability for columns
        /// it didn't work correctly for columns containg controls
        /// & I insisted to have sort perticularly based on Labels contents
        /// so I added this event handler
        /// </summary>
        /// <param name="sender">DataGrid as object</param>
        /// <param name="e">DataGridSortingEventArgs</param>
        protected void OnSorting(object sender, DataGridSortingEventArgs e)
        {
            var dataGrid = sender as DataGrid;

            if (dataGrid == null)
            {
                return;
            }
            ExtendedDataTable dataTable = (dataGrid.ItemsSource as DataView).Table as ExtendedDataTable;

            DataGridColumn     column             = e.Column;
            ExtendedDataColumn extendedDataColumn = dataTable.Columns[column.SortMemberPath] as ExtendedDataColumn;

            column.SortDirection = GetSortDirection(column);

            DataView           dataView = dataGrid.ItemsSource as DataView;
            Type               comparerType;
            BaseCustomComparer comparer;

            switch (extendedDataColumn.ColumnType)
            {
            case ColumnType.Label:
                // sort by decimal values in content of the label
                dataView.Sort = string.Empty;
                Type contentType = extendedDataColumn.ContentType;
                comparerType = typeof(LabelComparer <>).MakeGenericType(contentType);
                comparer     = Activator.CreateInstance(comparerType, column.SortDirection.Value) as BaseCustomComparer;
                dataTable.ApplySort(column.SortMemberPath, comparer);
                break;

            case ColumnType.ComboBox:
                dataView.Sort = string.Empty;
                comparer      = new ComboBoxComparer <string>(column.SortDirection.Value);
                dataTable.ApplySort(column.SortMemberPath, comparer);
                break;

            case ColumnType.Button:
                // not allow to sort by button
                break;

            case ColumnType.CheckBox:
            case ColumnType.Text:
            default:
                dataView.Sort = GetSort(column);
                break;
            }
            e.Handled = true;
        }