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