2016-04-28 13 views
0

Ich versuche, Daten zu einem Kendo-Gitter mit einigen Parametern zu holen und zu laden. Aber wenn ich den Datumsparameter verwende, ändert sich das Format des Datums und zeigt mir falsche Daten auf der Serverseite an.Datumsformat ändert sich beim Abrufen von Daten mit Kendo Grid

Als Beispiel verwende ich als Parameter: new Date ("01. April 2016"). Aber auf der Serverseite wird es 04/01/2016, was falsch ist.

function passFilterCstDetails() { 
 

 
     var statemenetInquiryParameter = {}; 
 

 
     statemenetInquiryParameter.isPrintZero = true; 
 
     statemenetInquiryParameter.isPrintPayments = true; 
 
     statemenetInquiryParameter.isPrintAdjust = true; 
 
     statemenetInquiryParameter.cst_stmt_from = new Date("April 01, 2016"); 
 
     statemenetInquiryParameter.cst_stmt_to = new Date("April 12, 2016"); 
 
     statemenetInquiryParameter.customerCode = 007; 
 

 
     return { 
 
      statemenetInquiryParameter: statemenetInquiryParameter 
 
     } 
 
    }
<div class="row"> 
 
        <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12"> 
 
         @(Html.Kendo().Grid<ServicePROWeb.ServiceProWCFService.CstTran>() 
 
          .Name("gridCustomerCstTranDetails") 
 
          .Columns(columns => 
 
          { 
 
           columns.Bound(p => p.cst_inv_date).Title("Invoice Date").HtmlAttributes(new { @style = "text-align: right;" }).Format(Session["DisplayFormat_GridDate"].ToString()).Width(80); 
 
           columns.Bound(p => p.cst_type).Title("Type").Width(80); 
 
           columns.Bound(p => p.cst_ih_invno).Format("{0:n2}").HtmlAttributes(new { @style = "text-align: right;" }).Filterable(false).Title("Invoice Number").Width(80); 
 
           columns.Bound(p => p.cst_dr_amount).Format("{0:n2}").HtmlAttributes(new { @style = "text-align: right;" }).Filterable(false).Title("Debit").Width(80); 
 
           columns.Bound(p => p.cst_cr_amount).Format("{0:n2}").HtmlAttributes(new { @style = "text-align: right;" }).Filterable(false).Title("Credit").Width(80); 
 
           columns.Bound(p => p.cst_dr_balance).Format("{0:n2}").HtmlAttributes(new { @style = "text-align: right;" }).Filterable(false).Title("Balance").Width(80); 
 
          }) 
 
          .Selectable() 
 
          .Sortable() 
 
          .Scrollable() 
 
          .Resizable(resize => resize.Columns(true)) 
 
          .HtmlAttributes(new { style = "cursor:pointer;height:auto;width:auto;margin-top: 0px;" }) 
 
          .DataSource(dataSource => dataSource 
 
          .Ajax() 
 
          .Read(read => read.Action("LoadCustomerStatementEnquiryDetails", "Stage").Data("passFilterCstDetails"))) 
 
         ) 
 
        </div> 
 
       </div>

public class StatemenetInquiryParameter 
{ 
    public decimal customerCode { get; set; } 
    public DateTime cst_stmt_from { get; set; } 
    public DateTime cst_stmt_to { get; set; } 
    public bool isPrintZero { get; set; } 
    public bool isPrintPayments { get; set; } 
    public bool isPrintAdjust { get; set; } 
} 

public ActionResult LoadCustomerStatementEnquiryDetails([DataSourceRequest]DataSourceRequest request, StatemenetInquiryParameter statemenetInquiryParameter) 
    { 
     List<CstTran> l = new List<CstTran>(); 

     for (int i = 0; i < 12; i++) 
     { 
      CstTran c = new CstTran(); 

      c.cst_inv_date = statemenetInquiryParameter.cst_stmt_from.AddDays(i); 
      c.cst_type = "I"; 
      c.cst_ih_invno = i + 1; 
      c.cst_dr_amount = i; 
      c.cst_cr_amount = 0; 
      c.cst_dr_balance = c.cst_dr_balance + i; 

      l.Add(c); 
     } 

     return Json(l.ToDataSourceResult(request)); 
    } 
+0

Wenn Sie also den Wert vom Server zurückziehen, erhalten Sie den 1. April oder den 4. Januar. Wenn es 4. Januar ist, dann ist dies ein einfaches "Globalisierungsproblem", wo Sie einen Teil Ihrer Lösung haben Übersetzen zwischen etwas wie "en-US" und "en-GB" zB MMddyyyy vs ddMMyyyy mit diesem Link könnte helfen: http://docs.telerik.com/kendo-ui/framework/globalization/overview –

Antwort

0

ich auch dieses Problem hatte, löste ich es durch das Datenformat zum Zeitpunkt des Sparens zu überprüfen.

1- die Daten finden, während

var dataS = $("#grid").data("kendoGrid").dataSource; 
var updatedData = dataS._data; 

2- Check das Format zu speichern und es dann speichern, rsrc_dt meine Daten Parameter

var dateValue = updatedData[i].rsrc_dt; 
    var day; var year; var mon; 
    if (typeof dateValue === 'string' || dateValue instanceof String) { 
    day = dateValue.split('/')[0]; // use when date is not in correct string format 
    mon = dateValue.split('/')[1]; 
    year = dateValue.split('/')[2]; 
    var dateS = day + '/' + mon + '/' +year; 
    serverData[i].rsrc_dt = dateValue; 
    } 
    else if (dateValue instanceof Date) { 
    var date = new Date(updatedData[i].rsrc_dt); 
    year = date.getFullYear(); 
    day = date.getDate(); 
    day = day < 10 ? '0' + day : day 
    mon = date.getMonth(); 
    mon = mon + 1; 
    mon = mon < 10 ? '0' + mon : mon; 
    var dateF = day + "/" + mon + "/" + year; 
    serverData[i].rsrc_dt = dateF; 
    } 

3- ist, können Sie dies auch versuchen, geben Format von Daten in Feldvorlage wie diese

 { field: "rsrc_dt", title: "Session Date", format: "{0:dd/MM/yyyy}", editor: dateTimeEditor, width: 73, attributes: { "class": "azN" }, }, 

4- Verwenden DateEditor

function dateTimeEditor(container, options) { 
    $('<input name="editableBlock" data-text-field="' + options.field + '" data-value-field="' + options.field + '" data-bind="value:' + options.field + '" data-format="' + options.format + '"/>') 
      .appendTo(container) 
      .kendoDatePicker({ min: btch_strt_dt }); 

}