Reputation:
How do you change the format of the data in a column of a LINQ to SQL classes in a DataGrid control?
I have a SQL server table column with DateTime
data and it shows as you would expect, 10/19/2015 8:30:00 AM
How do you change the format to just show the date 10/19/2015
I could not see anything in the properties panel that would do this. Will this be handled in XMAL?
The code I have so far.
public partial class MainWindow : Window
{
HomeLINQSqlDataContext dc = new HomeLINQSqlDataContext(Properties.Settings.Default.Staff_ManagerConnectionString2);
//TimeRecorderLINQSqlDataContext dc = new TimeRecorderLINQSqlDataContext(Properties.Settings.Default.Staff_ManagerConnectionString1);
public MainWindow()
{
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
PopulateCollection();
if (dc.DatabaseExists()) TimeRcorderDataGrid.ItemsSource = dc.Staff_Time_TBLs;
//if (dc.DatabaseExists()) TimeRcorderDataGrid.ItemsSource = dc.Staff_Data_TBLs;
InitializeComponent();
}
private void SaveButton_Click(object sender, RoutedEventArgs e)
{
dc.SubmitChanges();
}
private void PopulateCollection()
{
ObservableCollection<FooClass> fooColl = new ObservableCollection<FooClass>();
for (int i = 0; i <= 10; i++)
{
fooColl.Add(new FooClass() { Description = i.ToString(), SomeDate = DateTime.Now });
}
TimeRcorderDataGrid.ItemsSource = fooColl;
}
}
public class FooClass
{
public string Description { get; set; }
public DateTime SomeDate { get; set; }
}
}
XAML,
<TabControl>
<TabItem Header=" 社員データ " FontSize="20">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="16*"/>
<ColumnDefinition Width="113*"/>
<ColumnDefinition Width="1057*"/>
</Grid.ColumnDefinitions>
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding StartDate, StringFormat=\{0:dd.MM.yy \}}" />
</DataGrid.Columns>
</DataGrid>
<DataGrid Name="TimeRcorderDataGrid" Margin="0,0,0,79" Grid.ColumnSpan="3">
<DataGrid.Columns>
<DataGridTextColumn Width="Auto" />
</DataGrid.Columns>
</DataGrid>
<Button x:Name="SaveButton" Content="Save" Click="SaveButton_Click" Grid.Column="1" HorizontalAlignment="Left" Margin="10,583,0,0" VerticalAlignment="Top" Width="391" Grid.ColumnSpan="2" Height="57"/>
</Grid>
</TabItem>
<TabItem Header=" 入力ページ " FontSize="20">
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" Margin="10" Name="dataGrid1">
<DataGrid.Columns>
<DataGridComboBoxColumn Header="Combo" Width="300"
SelectedItemBinding="{Binding Values}"
/>
</DataGrid.Columns>
</DataGrid>
</TabItem>
</TabControl>
Thanks
Upvotes: 2
Views: 147
Reputation: 38209
You can format DateTime
using StringFormat
in the binding. Let me show an example:
XAML:
<DataGrid Name="dataGrid" VerticalGridLinesBrush="Yellow"
HorizontalGridLinesBrush="Yellow" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Description}" />
<DataGridTextColumn Binding="{Binding SomeDate, StringFormat=\{0:dd.MM.yy \}}" />
</DataGrid.Columns>
</DataGrid>
Model:
public class FooClass
{
public string Description { get; set; }
public DateTime SomeDate { get; set; }
}
code-behind:
public MainWindow()
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
InitializeComponent();
PopulateCollection();
}
private void PopulateCollection()
{
ObservableCollection<FooClass> fooColl = new ObservableCollection<FooClass>();
for (int i = 0; i <= 10; i++)
{
fooColl.Add(new FooClass() { Description=i.ToString(), SomeDate=DateTime.Now});
}
dataGrid.ItemsSource = fooColl;
}
Update:
There 12 columns in the DataGrid that is imported from SQL server, only two of those columns are DateTime , No. 7 and No. 8 column. How do you specify the format to those columns?
You should explicitly declare columns of your DataGrid
and write StringFormat
for columns No. 7
and No. 8
. For example:
<DataGrid Name="TimeRcorderDataGrid" Margin="0,0,0,79" Grid.ColumnSpan="3">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding ColumnOne}" Width="Auto" />
<DataGridTextColumn Binding="{Binding ColumnTwo}" Width="Auto" />
<DataGridTextColumn Binding="{Binding ColumnThree}" Width="Auto" />
<DataGridTextColumn Binding="{Binding ColumnFour}" Width="Auto" />
<DataGridTextColumn Binding="{Binding ColumnFive}" Width="Auto" />
<DataGridTextColumn Binding="{Binding ColumnSix}" Width="Auto" />
<DataGridTextColumn Binding="{Binding ColumnSeven, StringFormat=\{0:dd.MM.yy \}}"}" Width="Auto" />
<DataGridTextColumn Binding="{Binding ColumnEight, StringFormat=\{0:dd.MM.yy \}}"}" Width="Auto" />
<DataGridTextColumn Binding="{Binding ColumnNine}" Width="Auto" />
<DataGridTextColumn Binding="{Binding ColumnTen" Width="Auto" />
<DataGridTextColumn Binding="{Binding ColumnEleven}" Width="Auto" />
<DataGridTextColumn Binding="{Binding ColumnTwelve}" Width="Auto" />
</DataGrid.Columns>
</DataGrid>
Upvotes: 0
Reputation: 5487
If you are defining the columns explicitly (rather than relying on autoGenerateColumns) you should be able to state the format of your dates;
<DataGrid AutoGenerateColumns="False" ... >
<DataGrid.Columns>
<DataGridTextColumn Header="Raised" Binding="{Binding INSERT_PROPERTY_HERE, StringFormat=\{0:dd/MM/yy\}}"/>
</DataGrid.Columns>
</DataGrid>
Upvotes: 1