Example #1
0
        /// <summary>
        ///   Formats a Grid Column based on the Settings
        /// </summary>
        /// <param name = "setting"></param>
        public static GridColumn FormatGridColumn(GridViewColumn setting)
        {
            GridColumn column;

            switch (setting.Type.ToLower())
            {
            case "image":
                column = new GridImageColumn();
                //((GridImageColumn)column) = new Bitmap(1, 1);   // Default empty Image
                break;

            case "process":
                column = new GridPercentColumn();
                break;

            case "check":
                column = new GridCheckBoxColumn();
                break;

            case "rating":
                //column = new DataGridViewRatingColumn();
                column = new GridTextColumn();
                break;

            default:
                column = new GridTextColumn();
                break;
            }

            column.HeaderText = setting.Title;
            column.IsReadOnly = setting.Readonly;
            column.IsHidden   = !setting.Display;
            column.Width      = setting.Width;
            //column.IsFrozen = setting.Frozen;
            // For columns bound to a data Source set the property
            //if (setting.Bound)
            //{
            column.MappingName = setting.Name;
            //}

            switch (setting.Type.ToLower())
            {
            case "text":
            case "process":
                //  column.ValueType = typeof(string);
                break;

            case "number":
            case "check":
            case "rating":
                //  column.ValueType = typeof(int);
                break;
            }

            return(column);
        }
        public static void GenerateColumnsSfDataGrid(SfDataGrid dataGrid, DataTable table, string prefab)
        {
            using (var conn = new SqlConnection(App.ConnectionString))
            {
                conn.Open();
                if (!string.IsNullOrEmpty(prefab))
                {
                    DataTable prefabTable = App.GetPrefabDataTable(conn, $"{Settings.Default.Schema}_PREFABS", prefab);
                    DataTable comboTable  =
                        App.GetPrefabDataTable(conn, $"{Settings.Default.Schema}_COMBOBOXES", prefab);

                    //could loop by table.ColumnNames.Count; but if prebab is changed... problems; maybe not all columns showing
                    for (var i = 0; i < table.Columns.Count; i++)
                    {
                        GridColumn column;

                        try
                        {
                            if (prefabTable.Rows[i]["TYPES"].ToString().ToLower().Equals("autocomplete"))
                            {
                                column = new GridTemplateColumn
                                {
                                    MappingName = table.Columns[i].ColumnName,
                                    HeaderText  = prefabTable.Rows[i]["COLUMNS"].ToString()
                                };

                                var comboStrings = new HashSet <string>();
                                for (var j = 0; j < comboTable.Rows.Count; j++)
                                {
                                    if (!string.IsNullOrEmpty(
                                            comboTable.Rows[j][prefabTable.Rows[i]["COLUMNS"].ToString()].ToString()))
                                    {
                                        comboStrings.Add(comboTable.Rows[j][prefabTable.Rows[i]["COLUMNS"].ToString()]
                                                         .ToString());
                                    }
                                }

                                var autoCompleteElem = new FrameworkElementFactory(typeof(AutoComplete));

                                var autoCompleteItemsBind = new Binding
                                {
                                    Source = comboStrings,
                                    UpdateSourceTrigger   = UpdateSourceTrigger.PropertyChanged,
                                    BindsDirectlyToSource = true
                                };

                                var autoCompleteBind =
                                    new Binding(table.Columns[i].ColumnName)
                                {
                                    UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                                    Mode = BindingMode.TwoWay,
                                    BindsDirectlyToSource = true
                                };

                                autoCompleteElem.SetValue(UIElement.FocusableProperty, true);
                                autoCompleteElem.SetValue(AutoComplete.IsDropDownOpenProperty, true);
                                autoCompleteElem.SetValue(ItemsControl.IsTextSearchEnabledProperty, true);
                                autoCompleteElem.SetValue(AutoComplete.IsAutoAppendProperty, true);
                                autoCompleteElem.SetValue(ItemsControl.IsTextSearchCaseSensitiveProperty, false);
                                autoCompleteElem.SetValue(AutoComplete.CustomSourceProperty, autoCompleteItemsBind);
                                autoCompleteElem.SetValue(AutoComplete.TextProperty, autoCompleteBind);
                                autoCompleteElem.SetValue(AutoComplete.CanResizePopupProperty, false);
                                //autoCompleteElem.SetValue(AutoComplete.IsFilterProperty, true);
                                autoCompleteElem.SetValue(AutoComplete.EnableSortingProperty, false);

                                var cellEditingTemplate =
                                    new DataTemplate(typeof(AutoComplete))
                                {
                                    VisualTree = autoCompleteElem
                                };
                                ((GridTemplateColumn)column).EditTemplate = cellEditingTemplate;

                                var defaultElement = new FrameworkElementFactory(typeof(TextBlock));

                                var bind = new Binding(table.Columns[i].ColumnName)
                                {
                                    UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                                    Mode = BindingMode.TwoWay,
                                    BindsDirectlyToSource = true
                                };

                                defaultElement.SetValue(TextBlock.TextProperty, bind);
                                defaultElement.SetValue(FrameworkElement.VerticalAlignmentProperty,
                                                        VerticalAlignment.Center);

                                var defaultTemplate = new DataTemplate(typeof(TextBlock))
                                {
                                    VisualTree = defaultElement
                                };
                                ((GridTemplateColumn)column).CellTemplate = defaultTemplate;

                                dataGrid.Columns.Add(column);
                            }
                            else if (prefabTable.Rows[i]["TYPES"].ToString().ToLower().Equals("datepicker"))
                            {
                                column = new GridDateTimeColumn
                                {
                                    MappingName            = table.Columns[i].ColumnName,
                                    Pattern                = DateTimePattern.ShortDate,
                                    CanEdit                = true,
                                    AllowNullValue         = true,
                                    NullText               = string.Empty,
                                    AllowScrollingOnCircle = true,
                                    EnableBackspaceKey     = true,
                                    EnableDeleteKey        = true,
                                    ShowRepeatButton       = true,
                                    HeaderText             = prefabTable.Rows[i]["COLUMNS"].ToString()
                                };

                                dataGrid.Columns.Add(column);
                            }
                            else if (prefabTable.Rows[i]["TYPES"].ToString().ToLower().Equals("checkbox"))
                            {
                                column = new GridCheckBoxColumn
                                {
                                    MappingName  = table.Columns[i].ColumnName,
                                    IsThreeState = false,
                                    HeaderText   = prefabTable.Rows[i]["COLUMNS"].ToString()
                                };

                                dataGrid.Columns.Add(column);
                            }
                            else if (prefabTable.Rows[i]["TYPES"].ToString().ToLower().Equals("numeric"))
                            {
                                column = new GridNumericColumn
                                {
                                    MappingName          = table.Columns[i].ColumnName,
                                    HeaderText           = prefabTable.Rows[i]["COLUMNS"].ToString(),
                                    NumberDecimalDigits  = 3,
                                    NumberGroupSeparator = ","
                                };

                                dataGrid.Columns.Add(column);
                            }
                            else if (prefabTable.Rows[i]["TYPES"].ToString().ToLower().Equals("currency"))
                            {
                                column = new GridCurrencyColumn
                                {
                                    MappingName = table.Columns[i].ColumnName,
                                    HeaderText  = prefabTable.Rows[i]["COLUMNS"].ToString()
                                };

                                dataGrid.Columns.Add(column);
                            }
                            else if (prefabTable.Rows[i]["TYPES"].ToString().ToLower().Equals("hyperlink"))
                            {
                                column = new GridHyperlinkColumn
                                {
                                    MappingName = table.Columns[i].ColumnName,
                                    HeaderText  = prefabTable.Rows[i]["COLUMNS"].ToString()
                                };

                                dataGrid.Columns.Add(column);
                            }
                            else if (prefabTable.Rows[i]["TYPES"].ToString().ToLower().Equals("percentage"))
                            {
                                column = new GridPercentColumn
                                {
                                    MappingName = table.Columns[i].ColumnName,
                                    HeaderText  = prefabTable.Rows[i]["COLUMNS"].ToString()
                                };

                                dataGrid.Columns.Add(column);
                            }
                            else if (prefabTable.Rows[i]["TYPES"].ToString().ToLower().Equals("combobox"))
                            {
                                var comboStrings = new HashSet <string>();
                                for (var j = 0; j < comboTable.Rows.Count; j++)
                                {
                                    if (!string.IsNullOrEmpty(
                                            comboTable.Rows[j][prefabTable.Rows[i]["COLUMNS"].ToString()].ToString()))
                                    {
                                        comboStrings.Add(comboTable.Rows[j][prefabTable.Rows[i]["COLUMNS"].ToString()]
                                                         .ToString());
                                    }
                                }

                                column = new GridComboBoxColumn
                                {
                                    MappingName     = table.Columns[i].ColumnName,
                                    ItemsSource     = comboStrings,
                                    StaysOpenOnEdit = true,
                                    IsEditable      = true,
                                    HeaderText      = prefabTable.Rows[i]["COLUMNS"].ToString()
                                };

                                dataGrid.Columns.Add(column);
                            }
                            else
                            {
                                column = new GridTextColumn
                                {
                                    MappingName = table.Columns[i].ColumnName,
                                    HeaderText  = prefabTable.Rows[i]["COLUMNS"].ToString()
                                };

                                dataGrid.Columns.Add(column);
                            }
                        }
                        catch
                        {
                            column = new GridTextColumn
                            {
                                MappingName = table.Columns[i].ColumnName,
                                HeaderText  = table.Columns[i].ColumnName
                            };

                            dataGrid.Columns.Add(column);
                        }
                    }
                }
                else
                {
                    foreach (DataColumn column in table.Columns)
                    {
                        GridColumn gridColumn = new GridTextColumn
                        {
                            MappingName = column.ColumnName,
                            HeaderText  = column.ColumnName
                        };

                        dataGrid.Columns.Add(gridColumn);
                    }
                }

                conn.Close();
            }
        }