SqlServer/.NET DateTime in input field
SqlServer/.NET DateTime in input field
Description of problem:
I have various issues that just aren't affecting my implementation or I'm doing it wrong. These all are probably related in some way.
- Despite the messaging here: https://editor.datatables.net/reference/field/datetime about changing the displayFormat on the value in the INPUT field, Its showing as a datetime still. I get no error message in console about moment.js. Datatable view formats just fine
Editor js
{
label: 'StartDate',
name: 'StartDate',
type: 'datetime',
def: () => new Date(),
displayFormat: 'MM-DD-yyyy'
},
{
label: 'EndDate',
name: 'EndDate',
type: 'datetime',
def: () => new Date(),
displayFormat: 'MM-DD-yyyy',
}
Datatable js
{
data: "StartDate",
title: "StartDate",
render: function(data, type, row) {
return moment(data).format("MM-DD-yyyy");
}
},
{
data: "EndDate",
title: "EndDate",
render: function(data, type, row) {
return moment(data).format("MM-DD-yyyy");
}
}
Editor in .net seems to have zero affect using the GetFormatter. I've tried many different variations based on examples, but its untouched. I know I have two different ISO's in screenshot, I've been trying to get at least something to show changed in the INPUT field. https://editor.datatables.net/manual/net/formatters#Date-and-time
DatePicker isn't defaulting its date on selection.
Datatables is string sorting, not date sorting
Answers
Can you show me an example of the JSON data that is being loaded for the rows? Your
GetFormatter
looks like it should result in the data being inYYYY-MM-DD
format, which is ideal.Use the
datetime
renderer - at the moment you are returning a string for all types - hence why it is string sorting. The renderer will handle the formatting for you:Example here.
Could you try:
please?
It will depend on what the server is returning, but hopefully that will help. If not, it would be really useful if you could link to a page showing the issue so I can help to debug it and see the relevant data.
Allan
Server is returning this:
{"draw":null,"data":[{"DT_RowId":"row_1","Id":1,"StartDate":"2018-06-01T00:00:00","EndDate":"2018-09-01T00:00:00" ....
Which it shows in the input field.
I apologize but right now the page only exists in local development. There is nothing special about the date being returned. Its a SQL Server Datetime, to a C# DateTime property.
I tried the wireFormat before, but might have not tried it with the current puzzle pieces in place.
Let me double check on that property.
From your comments it looks like the
.GetFormatter(Format.DateSqlToFormat(Format.DATE_ISO_8601 ))
isn't returning what its supposed to.Makes the Datatables js show blank.
Makes the Editor input field show blank.
Just like to add that I have been looking at the DatesController and the DateTimeController in the examples in .NET package and I feel like I've done the same thing as those controllers.
I'll continue to examine.. but as of right now I'm still at a loss.
I've replicated the code exactly whats going on in datescontroller but no luck.
Here are my includes:
As you say, the response from the server-side doesn't look right. The
DATE_ISO_8601
token is the correct one to use. I'm not sure why that isn't working!What version of the dll are you using? Also, what is the data type of the column in the database?
Allan
@allan thank you for trying to figure this out. Here is where I'm sitting now. I can successfully change the date format from the Datatable JS in the datatable, but I can never seem to touch the format of the date in the input (contrary to the example I'm mimicking
/examples/dates/dates.html
)Editor DLL is 2.3.2.0
Database (StartDate/EndDate Columns)
Code (modeled off the datescontroller example)
Data returned:
Datatable JS (modeled off of dates.html example)
C# Model:
Output
Side note: I noticed that the column is LEFT aligned when its reading it as a string, but when its reading it as a datetime, everything is RIGHT aligned. Is this intended?
Hmm... just noticed my datetime column... there is a slight difference:
Hmmm - I'll set up a test database here with a
datetime2(7)
- I'm wondering if that is the issue. My tests usedatetime
and I wonder if the formatter isn't quite coping with the different time (although I would have thought it would map to aDateTime
and this suggests that it does).Sorry I don't have an immediate answer - there will be a solution though! As I say, I'll try a test with
datetime2(7)
here.Allan
Hey no problem. I think we've narrowed down the issue.
Just an FYI, this is the default datatype in sql server being set by Entity Framework in code first these days. At least thats what its looking like.
So if we can improve going forward or at least figure out how to handle it in that format.. then progress is progress. And I'll be happy to have helped.