After making improvements in my WPF datagrids, which I like automatic mode, I added several things like stringformat, keeping sorting, adding columns and else.
First, let’s check the DateTime, by default it is a DatagridTextColumn with an stringformat containing date, hour and PM. In order to change this:
DG1.AutoGeneratingColumn += (s, e) => { if (e.PropertyType == typeof(DateTime) || e.PropertyType == typeof(Nullable<DateTime>)) (e.Column as DataGridTextColumn).Binding.StringFormat = "dd/MM/yyyy"; }
Second, let’s remove several properties in my grid, I could add a DescriptionTag over my Fields or Properties (check my other posts) or simply do the following:
DG1.AutoGeneratingColumn += (s, e) => { List<String> properties = new List<string>() { "A","B","C"}; if (properties.Contains(e.PropertyName)) { e.Cancel = true; return; } }
Third, after the datagrid is created, let’s add another Column with TextBlock in view mode and DatePicker in edit mode:
DG1.AutoGeneratedColumns += (s, e) => { DataGridTemplateColumn dgct = new DataGridTemplateColumn(); dgct.Header = "Limit"; dgct.SortMemberPath = "Limit"; Binding b = new Binding("Limit"); b.StringFormat = "dd/MM/yyyy"; #region Editing FrameworkElementFactory factory = new FrameworkElementFactory(typeof(DatePicker)); factory.SetValue(DatePicker.SelectedDateProperty, b); DataTemplate cellEditingTemplate = new DataTemplate(); cellEditingTemplate.VisualTree = factory; dgct.CellEditingTemplate = cellEditingTemplate; #endregion #region View FrameworkElementFactory sfactory = new FrameworkElementFactory(typeof(TextBlock)); sfactory.SetValue(TextBlock.TextProperty, b); DataTemplate cellTemplate = new DataTemplate(); cellTemplate.VisualTree = sfactory; dgct.CellTemplate = cellTemplate; #endregion DG1.Columns.Insert(1, dgct); }
And that’s all, we have modified and added columns keeping the auto mode in the datagrid.