Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 免费使用jQGrid dateformatter并重用网格中的完整数据_Jquery_Datepicker_Jqgrid_Date Formatting_Free Jqgrid - Fatal编程技术网

Jquery 免费使用jQGrid dateformatter并重用网格中的完整数据

Jquery 免费使用jQGrid dateformatter并重用网格中的完整数据,jquery,datepicker,jqgrid,date-formatting,free-jqgrid,Jquery,Datepicker,Jqgrid,Date Formatting,Free Jqgrid,在免费jQgrid中,我遇到了日期格式化列和日期选择器作为编辑器的问题 我用一些日期格式的列定义了一个网格,数据中有Java日期对象 colModel:[ {name:"reminderFrom", label:"Reminder", formatter:"date", formatoptions:{srcformat:'ISO8601Long', newformat:'d.m.Y'}, editoptions:{size:20, dataI

在免费jQgrid中,我遇到了日期格式化列和日期选择器作为编辑器的问题 我用一些日期格式的列定义了一个网格,数据中有Java日期对象

colModel:[ 
    {name:"reminderFrom",       label:"Reminder", 
    formatter:"date",  
    formatoptions:{srcformat:'ISO8601Long', newformat:'d.m.Y'},

    editoptions:{size:20, dataInit:function(el)
    {$(el).datepicker({dateFormat:'dd.mm.yy'});}, 

defaultValue: function($this) { return this.value; }},},
        ....
        ],
当我读取整个网格数据时

   var fulldata = g.jqGrid('getRowData');

   manipulate it (not the datestrings!) and then want to reuse it in the grid

    g.jqGrid('setGridParam',  {datatype: 'local',  data: fulldata });  
    g.trigger("reloadGrid");
    g.jqGrid('setGridParam',  { datatype: "json"});  
日期将更改。
如何使用dateformatter重新格式化日期字符串以便在网格中重用?

@Oleg 我知道JSFIDLE,但我无法构建示例

下面是一些伪代码-该应用程序基于struts并与ajax和json一起工作

Java-服务器端:

class MyDataBO {
  private String myKey;
  private java.util.Date myDate;
  //...setter/getter
}

class MyGridAction {
  List< MyDataBO> gridDataList;


  public String prepareList(){
     //fill the list with MyDataBO
     return SHOW;  //struts based
  }

  public List< MyDataBO> getGridDataList() {
    return gridDataList;
  }
}
类MyDataBO{
私有字符串myKey;
private java.util.Date myDate;
//…二传手/接球手
}
类MyGridAction{
ListgridDataList;
公共字符串预处理列表(){
//用MyDataBO填充列表
return SHOW;//基于struts
}
公共列表getGridDataList(){
返回gridDataList;
}
}
JSP-客户端

<table id="grid"></table>

<script type="text/javascript">
jQuery(document).ready(function() {

    jQuery("#grid").jqGrid({
        datatype: "json",
        mtype: "POST",
        url:    "MyGridAction.getGridDataList",
        jsonReader: {root: "gridDataList"},
        colModel:[
            {name:"myKey",  label:"key", key:true},
            {name:"myDate", label:"date", formatter:"date", formatoptions:{srcformat:'ISO8601Long', newformat:'d.m.Y'}
            ]
 });

</script>

jQuery(文档).ready(函数(){
jQuery(“网格”).jqGrid({
数据类型:“json”,
mtype:“POST”,
url:“MyGridAction.getGridDataList”,
jsonReader:{root:“gridDataList”},
colModel:[
{名称:“myKey”,标签:“key”,key:true},
{名称:“myDate”,标签:“date”,格式化程序:“date”,格式化选项:{srcformat:'ISO8601Long',newformat:'d.m.Y'}
]
});
问题就发生在这里

<script type="text/javascript">
    var g = jQuery("#grid");

    var fulldata = g.jqGrid('getRowData');

    // do some work on the array

    g.jqGrid('setGridParam',  {datatype: 'local',  data: fulldata });  
    g.trigger("reloadGrid");
    g.jqGrid('setGridParam',  { datatype: "json"});                    
</script>

var g=jQuery(“网格”);
var fulldata=g.jqGrid('getRowData');
//在阵列上做一些工作
g、 jqGrid('setGridParam',{datatype:'local',data:fulldata});
g、 触发器(“重新加载网格”);
g、 jqGrid('setGridParam',{datatype:'json});

重新加载网格后,日期会更改…

您的结果是什么?它会根据日期字符串每次更改。例如,2017年9月1日变为2015年8月28日,然后(再次执行)2010年8月27日…问题似乎是src='ISO8601Long'的DateFormatter-我认为它应该是'd.m.Y'仅用于重新加载。请始终包括您使用的jqGrid版本(或免费jqGrid)。此外,您还写了“Java日期对象”不包括从服务器返回的任何测试数据。您可以在Chrome/IE开发者工具的网络选项卡中看到从服务器返回的JSON/XML数据(按F12键启动)。此外,重要的是要了解,
newformat
中的日期格式必须是PHP日期格式,而jQuery UI的
dateFormat
取决于您使用的jQuery UI版本(
“dd.mm.yy”
用于新的jQuery UI,或
“dd.mm.yyyy”
用于旧版本)。您使用哪个jQuery UI?这里的问题可能是您使用getRowData方法获取数据。请在获取数据后检查数组的日期格式,即在变量
fulldata
中。创建网格版本时,日期字段的格式可能与初始字段的格式不同:jQuery.UI 1.12.1 jQuery 3.1.1 jqgrid 4。13.7问题是,我从getRowData获取数组中显示的datestring,并在setRowData中使用它。但是该列需要“ISO8601Long”作为输入。因此,我需要一个解决方案来将“d.m.Y”-字符串重新格式化为“ISO8601Long”,或者告诉该列它应该使用“d.m.Y”作为输入,或者告诉网格ist应该给我一个“ISO8601Long”我也尝试了millis(在一个隐藏列中),并用JavaScript.Date.toISOString()尝试了它,但没有成功。我选择了另一种方法-分离所有行,将它们放入数组中,操纵它(对象中的顺序和一些标志),然后再次附加它们。