user1452705
user1452705

Reputation:

LINQ to SQL Classes, How to change column format? (DataGrid)

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

Answers (2)

StepUp
StepUp

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

mark_h
mark_h

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

Related Questions