【发布时间】:2011-10-15 07:03:45
【问题描述】:
我正在使用 jqGrid 在我的第一个 ASP.NET MVC 3 上显示表格数据,发现它非常有用,尤其是过滤数据。对于字符串类型,我使用带有“包含”的列过滤,这对于剔除字符串非常有效。对于日期数据,我使用日期选择器。太好了。
现在我有几列(例如,“包含坚果”),它们本质上是布尔值。我想提供一种过滤这些的方法。现在它们显示为“true”和“false”,并使用与我的字符串类型列相同的基于字符串的过滤。这有点笨拙。我想我想做的是有一种方法可以通过下拉机制选择三个值(真/假/两者)之一。
我当前的 colModel 对我的“布尔”字段有一个类似的条目:
{ name: 'ContainsNuts',
index: 'ContainsNuts',
align: 'left',
searchoptions: { sopt: ['eq, 'ne']}
}
仅当用户输入“false”或“true”时才有效——同样,很笨重。
对于其他一些列,我想使用下拉列表进行枚举,例如,我有一个“锥体”列,因为有很多行并且我对结果进行分页 - 使用自动完整文本过滤有点成功-or-miss 让用户找到所有可能的值。希望这是有道理的。
所以我尝试过的是 - 我创建了一个如下所示的控制器操作:
public JsonResult AvailableCones()
{
var context = new IceCreamEntities();
var query = context.Cones.AsQueryable().Distinct();
List<string> all = query.Select(m => m.Name).ToList();
return Json(all, JsonRequestBehavior.AllowGet);
}
我做了这样的事情[也许是复杂的方法],在我的文档准备好的锥体的过滤对话框中创建一个下拉选择:
...
createSearchSelection = function (someValues) {
var outputValues = "";
if (someValues && someValues.length) {
for (var i = 0, j = someValues.length; i < j; ++i) {
var entry = someValues[i];
if (outputValues.length > 0) {
outputValues += ";";
}
outputValues += entry + ":" + entry;
}
}
return outputValues;
}
setTheSearchSelections = function (colName, url){
$('#icecreamgrid').jqGrid('setColProp', colName,
{
stype: 'select',
searchoptions: {
value: createSearchSelection(url),
sopt: ['eq']
}
});
}
gotData = function(data) {
setTheSearchSelections('ConeType', data);
}
var url = "/IceCream/AvailableConeTypes";
$.get(url, null, gotData);
结果是我在搜索对话框中获得了 ConeType 列的下拉菜单,并且正确的行显示在该列中。伟大的。很酷,它可以工作。
但是,我不知道该怎么做,就是让一个下拉列表显示在我的列标题过滤器中,就像现在显示在过滤器对话框中的那个一样。我怎样才能增加我必须做到这一点?其次,我怎样才能使我已经为布尔值工作?
【问题讨论】:
标签: asp.net-mvc jqgrid