jqGrid,如何从查询中填充选择列表
我在coldfusion项目中得到了一个基本的jqGrid。 我在jqGrid中的一个字段是组合框。目前editoption值是硬编码的,如下所示jqGrid,如何从查询中填充选择列表,jqgrid,Jqgrid,我在coldfusion项目中得到了一个基本的jqGrid。 我在jqGrid中的一个字段是组合框。目前editoption值是硬编码的,如下所示 colModel : [ { name:'seqnum',index:'seqnum', width:100,resizable:true, align:"left",sorttype:"text",editable:true,edittype:"select",editoptions: { value:"1:one
colModel :
[
{
name:'seqnum',index:'seqnum', width:100,resizable:true,
align:"left",sorttype:"text",editable:true,edittype:"select",editoptions:
{ value:"1:one;2:two"},editrules:{required:true}
}
]
我试图找出一种方法来填充查询/url下拉列表
任何帮助都将不胜感激
提前感谢创建一个使用json查询url的函数。此函数应返回格式为1:1的字符串;2:2 例如:
colModel :
[
{
name:'seqnum',index:'seqnum', width:100,resizable:true,
align:"left",sorttype:"text",editable:true,edittype:"select",editoptions:
{ value:getSequenceNumbers()},editrules:{required:true}
}
]
function getSequenceNumbers(){
$.getJSON("yourUrl", null, function(data) {
if (data != null) {
//construct string.
//(or the server could return a string directly)
}
});
}
我想您也可以将函数内联,但我认为它更难阅读。使用dataUrl
目前,dataUrl生成GET,但如果从Github中提取代码,则GET可以是对POST的更改,而不会产生明显的副作用。美元.getJSON/getSequenceNumbers的答案不起作用。无法从回调返回数据作为GetSequenceNumber的返回值,因为回调是异步的。您需要使用Martin建议的dataURL方法,或者在$.getJSON回调中设置jqGrid
$(document).ready(function() {
$.getJSON("GetURL", function(data) {
setupGrid(data);
});
});
function setupGrid(data) {
...
colModel :
[
{
name:'seqnum',index:'seqnum', width:100,resizable:true,
align:"left",sorttype:"text",editable:true,edittype:"select",editoptions:
{ value:data},editrules:{required:true}
}
]
...
}
值得注意的是,如果您使用的是服务器端脚本语言,那么您可以完全避开这个问题。例如,您可以使用PHP
{name:'myselectdata', index:'myselectdata', width:160, formatter:'select', editable:true, edittype:"select", cellsubmit:"clientArray", editoptions:{ <? echo getData() ?>} },
也许没有jQuery中处理所有内容那么优雅或便携,但我认为在概念上更容易。假设在ColModel中有这样一个列:
{name:'id_UDM', index:'id_UDM', width:150, editable:true, edittype:"select", editoptions:{dataUrl:'filename.php'}}
editoptions:{dataUrl:'filename.php'}
必须首先声明它是具有以下内容的select元素:
edittype:"select"
然后,在editoptions参数中添加如下数据URL:
{name:'id_UDM', index:'id_UDM', width:150, editable:true, edittype:"select", editoptions:{dataUrl:'filename.php'}}
editoptions:{dataUrl:'filename.php'}
php必须返回一个带有选项的select元素,下面是一个示例:
<?php
include("connectionToMyDatabase.php");
$query1 = "SELECT * FROM table WHERE
$result1 = mysql_query($query1);
$response ='<select>';
while($row = mysql_fetch_array($result1)) {
$response .= '<option value="'.$row['value'].'">'.$row['name'].'</option>';
}
$response .= '</select>';
echo $response;
mysql_close($db);
?>
希望这有帮助。我知道这是一个老问题,但我发现了同样的问题。 我通过结合dataUrl和ajaxSelectOptions来解决这个问题 请注意,dataUrl字符串是静态的,这意味着您不能在每次添加/编辑时发送不同的参数。下面的代码将不起作用
,editoptions: { dataUrl:"db.php?ajaxOp=getClassesOptions" + "&id="+selected_id }
要发送id等参数,可以使用ajaxSelectOptions
ajaxSelectOptions: //use this for combination with dataUrl for formatter:select
{
data: {
id: function () {
return selected_id;
}
}
},
每次进行添加/编辑时,将执行返回所选\u id的函数。希望这有帮助 我将代码改为searchoptions而不是editoptions。但是,它会自动选择第一个选项并过滤列表,因此我添加了以下内容来缓解这一问题
$response ='<select>';
$response .= '<option value=""></option>';
while($row = $stmt->fetch(PDO::FETCH_NUM)) {
$response .= '<option value="'.$row[0].'">'.$row[0].'</option>';
}
$response .= '</select>';
echo $response;
这类方法可以工作,但只有当您不想解码显示为ajax的第一个值以获取列表时,才会在编辑单元格时触发,因此formatter:“select”与此不兼容。是否可以将一些参数传递到dataUrl方法中?作为参数,我想从所选行$'grid'发送一些值。getRowDataid['colName']正确的数据格式将是{value:{1:'One',2:'Two'}}