This is a migrated thread and some comments may be shown as answers.

Spreadsheet with DataSource - how to format DateTime Cells

1 Answer 656 Views
Spreadsheet
This is a migrated thread and some comments may be shown as answers.
Philipp
Top achievements
Rank 1
Philipp asked on 06 Feb 2018, 01:04 PM

Hi,

I have defined my Spreadsheet as follows:

@(Html.Kendo().Spreadsheet()
    .Name("spreadsheet")
    .Sheets(sheets =>
    {
        sheets.Add()
            .Name("mySheet")
            .Columns(c =>
            {
                c.Add().Width(150);
                c.Add().Width(150);
            })
            .DataSource<MyViewModel>(ds => ds
                .Ajax()
                .Batch(true)
                .Read("ReadTimeSeries", "MyController")
                .Model(m => {
                    m.Field(p => p.Timestamp);
                    m.Field(p => p.Value);
                })
            );
    })
    .Sheetsbar(false)
)

When the Spreadsheet loads the data, it is displayed as Date only - the time part seems to be missing.

This is my DataModel:

    public class MyViewModel
    {
        [Display(Name = "Zeitstempel")]
        [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy HH:mm}"]
        public DateTime Timestamp { get; set; }

        [Display(Name = "Wert")]
        [DisplayFormat(DataFormatString = "{0:#,###.###}")]
        public decimal Value { get; set; }
    }

The DisplayFormatAttribute seems to be ignored. The Problem is that the count of the rows vary, so I can't predefine the format using Rows.Add().Cells(c => c.Add().Format("dd.MM.yyyy HH:mm").

 

How can I achieve the Timestamps to be displayed with date AND time?

1 Answer, 1 is accepted

Sort by
0
Veselin Tsvetanov
Telerik team
answered on 09 Feb 2018, 08:10 AM
Hello Philipp,

You will need to set the desired format for the cells (the entire column range), after the data has been populated in the Spreadsheet. To do that you could use the second render event of the widget:
@(Html.Kendo().Spreadsheet()
    .Name("spreadsheet")
...
    .Events(e => e.Render("onRender"))
...

and:
var renderNember = 0;
 
function onRender(e) {
  var spreadsheet = e.sender;
 
  renderNember++;
 
  if (renderNember < 2) {
    return;
  } else if (renderNember > 2) {
    spreadsheet.unbind('render');
    return;
  }
 
  var sheet = spreadsheet.activeSheet();
  // In case the column "C" contains the dates to be formatted
  var range = sheet.range('C2:C200');
  range.format('d/M/yyyy hh:mm');
}

Regards,
Veselin Tsvetanov
Progress Telerik
Try our brand new, jQuery-free Angular components built from ground-up which deliver the business app essential building blocks - a grid component, data visualization (charts) and form elements.
Tags
Spreadsheet
Asked by
Philipp
Top achievements
Rank 1
Answers by
Veselin Tsvetanov
Telerik team
Share this question
or