问题描述
|
我已经在不同情况下使用了jQuery UI自动完成功能。
我已经定制了结果,并且已经变得喜欢它。
现在,我想将其与jqgrid结合使用。
基本上,我希望用户在文本框中插入一些文本,并且在他/她这样做的同时,jqgrid会加载数据。
我知道我可以创建自己的jquery插件并达到相同的结果,但是也许有人已经做了我想要得到的。
谢谢
解决方法
为什么不将jqGrid绑定到自动完成源的回调函数中找到的数据对象。在下面,我有一个文本框供某人搜索用户。它对称为SearchUsers的WCF管道进行ajax调用。在ajax调用成功时,将调用“ function(data).... \”,其中“ data”是返回的数据。
//create the userlistautocomplete
$(\"#txtSearchUsers\").autocomplete({
source: function (request,response) {
SecurityAjax.SearchUsers(request.term,function (data) {
$(\"#usersList\").jqGrid(\'clearGridData\');
gridData = data;
$(\"#usersList\").setGridParam({ data: gridData });
$(\"#usersList\").trigger(\"reloadGrid\");
});
},minLength: 2,open: function () {
$(this).removeClass(\"ui-corner-all\").addClass(\"ui-corner-top\");
},close: function () {
$(this).removeClass(\"ui-corner-top\").addClass(\"ui-corner-all\");
}
}).data(\"autocomplete\")._renderItem = function (ul,item) {
return $(\"<li></li>\").data(\"item.autocomplete\",item).append(\"<a>\" + item.FirstName + \"<br>\" + item.LastName + \"</a>\").appendTo(ul);
};
在匿名函数“函数(数据)”中,我将现有jqGrid的数据设置为自动完成数据,然后刷新网格,其中网格定义如下:
$(\"#usersList\").jqGrid({
data: gridData,width: 800,datatype: \"local\",colNames: [\'User Id\',\"First Name\",\"Last name\",\"User name\"],colModel: [
{ name: \'SysUserId\',index: \'SysUserId\',width: 55,hidden: true },{ name: \'FirstName\',index: \'FirstName\',width: 100,editable: true },{ name: \'LastName\',index: \'LastName\',width: 90,{ name: \'UserName\',index: \'UserName\',editable: true }
],caption: \"Using events example\",onSelectRow: function (id) {
if (id && id !== lastsel) {
lastsel = id;
}
},ondblClickRow: function (id) {
},localReader: {
repeatitems: false,id: \"UserId\"
},pager: \'#pusersList\'
});
, colModel: [
{
name: \'PNumber\',width: 30,index: \'PNumber\',align:\'center\',editable: true,editrules: { required: true },editoptions:{dataInit:pnumberAuto},searchoptions: {dataInit:pnumberAuto,sopt: [\'eq\',\'cn\'] }
},],
pnumberAuto是:
function pnumberAuto(e) {
$(e).autocomplete({
source: \'/Autocomplete/QuickSearchPN\',delay:0
})
}
控制器是:
public ActionResult QuickSearchPN(string term)
{
var q = (from p in db.BOM
where p.PNumber.Contains(term)
select p.PNumber).Distinct().Take(10);
return Json(q,JsonRequestBehavior.AllowGet);
}
我认为这可以为您提供帮助。
, pedrodg使我走对了路。
如果有人感兴趣:
var myGrid = jQuery(\"#MyGrid\");
LoadSearchGrid([{}]);
$(\"#MySearch\").autocomplete({
minLength: 3,delay: 300,source: function(request,response) {
$.ajax({
url: \'<%=Url.Action(\"FetchData\",\"Home\")%>\',data: { Search: request.term },dataType: \"json\",type: \"POST\",success: function(data) {
myGrid.jqGrid(\'clearGridData\');
myGrid.setGridParam({ data: data });
myGrid.trigger(\"reloadGrid\");
}
});
}
});
function LoadSearchGrid(gridData) {
myGrid.jqGrid({
data: gridData,colNames: [\'Code\',\'Description\'],colModel: [
{ name: \'Code\',index: \'Code\',sortable: true,width: 50,align: \'left\' },{ name: \'Description\',index: \'Description\',width: 250,align: \'left\' }
],width: 300,height: 170
});
}