【问题标题】:How to Edit or Add a New Row in jqGrid如何在 jqGrid 中编辑或添加新行
【发布时间】:2010-04-15 20:53:35
【问题描述】:

我的 jqGrid 在从数据库中提取数据方面做得很好,但我无法理解“添加新行”功能的工作原理。

现在,我可以编辑内联数据,但无法使用模态框创建新行。我错过了额外的逻辑,即“如果这是一个新行,请将其发布到服务器端 URL”,而不是修改现有数据。 (现在,点击提交只会清除表单并重新加载网格数据。)

文档指出添加新行是:

jQuery("#editgrid").jqGrid('editGridRow',"new",{height:280,reloadAfterSubmit:false}); 

但我不确定如何正确使用它。我花了很多时间研究演示,但它们似乎都使用外部按钮来触发新的行命令,而不是使用我想要做的模态表单。

我的完整代码在这里:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>jqGrid</title>  

<link rel="stylesheet" type="text/css" media="screen" href="../css/ui-lightness/jquery-ui-1.7.2.custom.css" />
<link rel="stylesheet" type="text/css" media="screen" href="../css/ui.jqgrid.css" />

<script src="jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="../js/i18n/grid.locale-en.js" type="text/javascript"></script>
<script src="jquery.jqGrid.min.js" type="text/javascript"></script>
</head>
<body>
<h2>My Grid Data</h2>
<table id="list" class="scroll"></table>
<div id="pager" class="scroll c1"></div> 

<script type="text/javascript">
var lastSelectedId;

jQuery('#list').jqGrid({
url:'grid.php',
datatype: 'json',
mtype: 'POST',
colNames:['ID','Name', 'Price', 'Promotion'],
colModel:[    
   {name:'product_id',index:'product_id', width:25,editable:false},     
   {name:'name',index:'name', width:50,editable:true, edittype:'text',editoptions:{size:30,maxlength:50}},
   {name:'price',index:'price', width:50, align:'right',formatter:'currency', editable:true},
   {name:'on_promotion',index:'on_promotion', width:50, formatter:'checkbox',editable:true, edittype:'checkbox'}],
rowNum:10,
rowList:[5,10,20,30],
pager: $('#pager'),
sortname: 'product_id',
viewrecords: true,
sortorder: "desc",
caption:"Database",
width:500,
height:150,  
onSelectRow: function(id){
if(id && id!==lastSelectedId){
  $('#list').restoreRow(lastSelectedId);
  $('#list').editRow(id,true,null,onSaveSuccess);
  lastSelectedId=id; }},
editurl:'grid.php?action=save'}) 

.jqGrid('navGrid','#pager', 
    {refreshicon: 'ui-icon-refresh',view:true},
    {height:280,reloadAfterSubmit:true}, 
    {height:280,reloadAfterSubmit:true}, 
    {reloadAfterSubmit:true})

.jqGrid('editGridRow',"new",{height:280,reloadAfterSubmit:false}); 

function onSaveSuccess(xhr) 
{response = xhr.responseText; if(response == 1) return true; return false;}

</script></body></html>

如果它更容易,我愿意放弃内联编辑功能并通过模态框进行编辑和发布。

任何帮助将不胜感激。

【问题讨论】:

  • paul - 有机会发布您的新代码。我已设法编辑现有行,但无法添加新行。我已经尝试阅读演示,但完全搞糊涂了谢谢
  • @Paul,你能告诉我如何添加和编辑行吗?我是新手:(

标签: jqgrid new-operator row add


【解决方案1】:

首先,在大多数情况下,您不应该拨打jqGrid('editGridRow',"new"...)。取而代之的是,您应该让用户单击 Add Record 按钮。然后将出现一个对话框,其中包含 colModel 中所有具有editable=true 的字段。

点击提交按钮后,jqGrid 将 POST 数据到url 参数或editurl 参数(如果存在)定义的 URL。因为您使用参数mtype='POST' 进行数据填充,所以您必须定义额外的editurl 参数。您可以将 POST HTTP 代码覆盖为 PUT 或您喜欢的任何其他代码。

了解新记录的id 具有_empty 值很重要。 Edit 对话框与 Add 对话框的工作方式相同,但包含修改记录的id。作为添加新记录时将发送到服务器的附加重要参数是附加参数oper=add

有关详细信息,请阅读http://www.trirand.com/jqgridwiki/doku.php?id=wiki:form_editing 上的发布到服务器的内容部分。

我建议你也阅读jqGrid发送的不同参数的描述 prmNameshttp://www.trirand.com/jqgridwiki/doku.php?id=wiki:options上的参数

【讨论】:

  • 奥列格,非常感谢您的回复。这是我在任何地方看到的最好的解释。只是为了进一步澄清阅读这篇文章的其他人:以我上面所做的方式调用 jqGrid('editGridRow',"new") 会在没有用户请求的情况下启动模态表单。不是我想要的。另外,我以前不了解将附加参数发送到服务器端文件以获取新记录。您需要在服务器端使用该额外参数来确定网格请求的操作。再次感谢。
  • 你好,保罗。我很高兴听到,我可以帮助你。顺便说一句,您可以将答案标记为已接受。
  • 在我的情况下,我可以获得 Addi Record Dialog 但即使我将字段设置为可编辑也无法编辑字段
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
相关资源
最近更新 更多