Skip to content

Commit cc713d3

Browse files
ES-975464 - Resolve the ReadMe file length issue in this sample repository
1 parent 9f8a363 commit cc713d3

File tree

1 file changed

+143
-0
lines changed

1 file changed

+143
-0
lines changed

README.md

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
# How to create a custom column from existing column in wpf and uwp datagrid
2+
3+
This repositories contains the samples to create custom column from existing columnm in [WPF DataGrid](https://www.syncfusion.com/wpf-controls/datagrid) and [UWP DataGrid](https://www.syncfusion.com/uwp-ui-controls/datagrid).
4+
5+
You can create your own column by overriding the [predefined column types](https://help.syncfusion.com/wpf/datagrid/column-types#_Overriding_existing_cell) in `SfDataGrid`. For example, the `GridDateTimeColumn` loads the DateTime value by default. If you want to display `DateTimeOffset` value, you can create a new column by overriding the `GridDateTimeColumn` class.
6+
7+
In the below code snippet, converter created to format the `DateTimeOffSet` value to DateTime by defining `ValueBinding` (edit) and `DisplayBinding` (non-edit).
8+
9+
``` c#
10+
public class DateTimeOffsetFormatConverter : IValueConverter
11+
{
12+
private GridDateTimeOffsetColumn cachedColumn;
13+
14+
public DateTimeOffsetFormatConverter(GridDateTimeOffsetColumn column)
15+
{
16+
cachedColumn = column;
17+
}
18+
19+
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
20+
{
21+
value = ((DateTimeOffset)value).DateTime;
22+
var column = cachedColumn as GridDateTimeColumn;
23+
if (value == null || DBNull.Value == value)
24+
{
25+
if (column.AllowNullValue && column.MaxDateTime != System.DateTime.MaxValue && column.NullText == string.Empty)
26+
return column.MaxDateTime;
27+
28+
if (column.AllowNullValue && column.NullValue != null)
29+
return column.NullValue;
30+
else if (column.AllowNullValue && column.NullText != string.Empty)
31+
return column.NullText;
32+
33+
if (column.MaxDateTime != System.DateTime.MaxValue)
34+
return column.MaxDateTime;
35+
}
36+
37+
DateTime _columnValue;
38+
_columnValue = (DateTime)value;
39+
40+
if (_columnValue < column.MinDateTime)
41+
_columnValue = column.MinDateTime;
42+
43+
if (_columnValue > column.MaxDateTime)
44+
_columnValue = column.MaxDateTime;
45+
46+
return DateTimeFormatString(_columnValue, column);
47+
}
48+
49+
private string DateTimeFormatString(DateTime columnValue, GridDateTimeColumn column)
50+
{
51+
switch (column.Pattern)
52+
{
53+
case DateTimePattern.ShortDate:
54+
return columnValue.ToString("d", column.DateTimeFormat);
55+
case DateTimePattern.LongDate:
56+
return columnValue.ToString("D", column.DateTimeFormat);
57+
case DateTimePattern.LongTime:
58+
return columnValue.ToString("T", column.DateTimeFormat);
59+
case DateTimePattern.ShortTime:
60+
return columnValue.ToString("t", column.DateTimeFormat);
61+
case DateTimePattern.FullDateTime:
62+
return columnValue.ToString("F", column.DateTimeFormat);
63+
case DateTimePattern.RFC1123:
64+
return columnValue.ToString("R", column.DateTimeFormat);
65+
case DateTimePattern.SortableDateTime:
66+
return columnValue.ToString("s", column.DateTimeFormat);
67+
case DateTimePattern.UniversalSortableDateTime:
68+
return columnValue.ToString("u", column.DateTimeFormat);
69+
case DateTimePattern.YearMonth:
70+
return columnValue.ToString("Y", column.DateTimeFormat);
71+
case DateTimePattern.MonthDay:
72+
return columnValue.ToString("M", column.DateTimeFormat);
73+
case DateTimePattern.CustomPattern:
74+
return columnValue.ToString(column.CustomPattern, column.DateTimeFormat);
75+
default:
76+
return columnValue.ToString("MMMM", column.DateTimeFormat);
77+
}
78+
}
79+
80+
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
81+
{
82+
throw new NotImplementedException();
83+
}
84+
}
85+
86+
public class DateTimeOffsetToDateTimeConverter : IValueConverter
87+
{
88+
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
89+
{
90+
if (value == null)
91+
return null;
92+
return ((DateTimeOffset)value).DateTime;
93+
}
94+
95+
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
96+
{
97+
if (value == null)
98+
return null;
99+
return value is DateTimeOffset ? value : new DateTimeOffset((DateTime)value);
100+
}
101+
}
102+
```
103+
104+
In the below code snippet, `GridDateTimeOffsetColumn` column created from `GridDateTimeColumn`.
105+
106+
``` c#
107+
public class GridDateTimeOffsetColumn : GridDateTimeColumn
108+
{
109+
protected override void SetDisplayBindingConverter()
110+
{
111+
if ((DisplayBinding as Binding).Converter == null)
112+
(DisplayBinding as Binding).Converter = new DateTimeOffsetFormatConverter(this);
113+
114+
if ((ValueBinding as Binding).Converter == null)
115+
(ValueBinding as Binding).Converter = new DateTimeOffsetToDateTimeConverter();
116+
}
117+
}
118+
```
119+
120+
In the below code snippet, created `GridDateTimeOffsetColumn` added to `SfDataGrid.Columns` collection and specify the Pattern as FullDateTime. Since the ShortDate is the default pattern of `GridDateTimeColumn`.
121+
122+
### XAML
123+
124+
``` xml
125+
<syncfusion:SfDataGrid x:Name="dataGrid"
126+
AutoGenerateColumns="False"
127+
ItemsSource="{Binding Orders}">
128+
<syncfusion:SfDataGrid.Columns>
129+
<local:GridDateTimeOffsetColumn MappingName="OrderDate" Pattern="FullDateTime" UseBindingValue="True"/>
130+
</syncfusion:SfDataGrid.Columns>
131+
</syncfusion:SfDataGrid>
132+
```
133+
134+
### C#
135+
136+
``` c#
137+
this.datagrid1.Columns.Add(new GridDateTimeOffsetColumn()
138+
{
139+
MappingName = "OrderDate",
140+
Pattern = Syncfusion.Windows.Shared.DateTimePattern.FullDateTime,
141+
UseBindingValue = true
142+
});
143+
```

0 commit comments

Comments
 (0)