【问题标题】:How do I get the jqGrid Search column type when performing a search?执行搜索时如何获取 jqGrid 搜索列类型?
【发布时间】:2011-06-20 06:42:23
【问题描述】:

我在 ASP.net 上使用 jqGrid 3.8.2,我声明了一个非常简单的 jqGrid 配置。 数据显示正确,我可以通过搜索对话框按多个条件搜索...没问题。

问题在于,在我搜索不是字符串的值的情况下,我现在需要该列上数据的类型。 虽然我在列上有一个 'stype' 选项来准确说明我期望的类型,但是当我执行搜索时,这个配置并没有传递到请求查询字符串上。

我收到的 2 个搜索条件请求的 json 是这样的: {"groupOp":"AND","rules":[{"field":"EntityID","op":"gt","data":"3"},{"field":"EntityID"," op":"lt","data":"8"}]}

请注意,“数据”值始终用引号括起来,但该值是数字,并且该列的 stype 设置为“int”(我找不到任何关于如何使用它的信息)

最重要的是,当我提出请求时,我无法传递有关列类型的信息。

怎么做?

这是我的网格声明:

    $('#EntityListGrid').jqGrid({
        url: 'my url',
        datatype: 'json',
        mtype: 'GET',
        colNames: ['ID', 'Name', 'Actions'],
        colModel: [
        { name: 'EntityID', index: 'EntityID', width: 50, align: 'left', resizable: true, sortable: true, stype: 'int' },
        { name: 'Name', index: 'Name', width: 250, align: 'left', resizable: true, sortable: true, stype: 'string' },
        { name: 'act', index: 'act', width: 75, sortable: false },
        ],
        pager: $('#EntityListGridPager'),
        rowNum: 10,
        rowList: [10, 20, 30],
        sortname: 'EntityID',
        sortorder: 'desc',
        viewrecords: true,
        imgpath: '',
        caption: 'Entities',
        width: EntityListGridWidth,
        height: 400,
        gridComplete: function () {
            var ids = jQuery("#EntityListGrid").jqGrid('getDataIDs');
            var editImageUrl = 'edititem.GIF';
            for (var i = 0; i < ids.length; i++) {
                var cl = ids[i];

                ce = "<img src='" + editImageUrl + "'  onclick='EditEntity(" + cl + "); return false;' />";
                ce2 = "<input type='button' value='details' src='" + editImageUrl + "' onclick='EditEntity(" + cl + "); return false;' />";
                //jQuery("#EntityListGrid").jqGrid('setRowData', ids[i], { act: ce2 });
                $("#EntityListGrid").setRowData(ids[i], { act: ce2 });
            }
        }
        //});
    }).navGrid('#EntityListGridPager', { search: true, edit: false, add: false, del: false, searchtext: "Search" }, {}, {}, {}, { closeOnEscape: true, multipleSearch: true, closeAfterSearch: true });

【问题讨论】:

    标签: jquery jqgrid jqgrid-asp.net


    【解决方案1】:

    如何阅读the documentation stype 仅支持两个值:“文本”和“选择”。 stype 将仅用于在搜索对话框中构建不同的控件。

    所有将发送到服务器的“数据”元素始终编码为字符串,服务器必须将数据转换为相应的数据类型。例如,如果您使用列作为日期或整数,则服务器负责将数据转换为 DateTimeInt32Int64Double 或其他类型。

    【讨论】:

    • 谢谢,但是服务器怎么知道要转换的类型呢?我知道通常它可能只是因为请求处理程序具有这种知识,但在我的情况下,我有一个通用搜索机制,需要知道转换每个搜索值的类型,否则一切都将作为字符串。
    • @AlexCode:来自“我的 url”的服务器必须知道从哪里获取相应 jqGrid 所需数据的完整信息。如果您在内部使用任何“通用搜索机制”,您应该调用知道“特定”网格和所需所有类型的“特定”服务器方法。 “特定”服务器方法可以进行类型转换并调用您的“通用搜索机制”。
    • 是的......也许方法是在调用通用搜索引擎之前向处理程序添加知识。谢谢奥列格。
    • @AlexCode:如果您在服务器端没有其他方法,您可以发送有关postData 参数的附加信息。数据是完全免费的,数据将作为任何请求的一部分发送到服务器。例如,您可以发布有关您使用的所有列的类型的信息。
    • 这也是个好主意。我正在解决这个问题,只是因为我想让我的层完全解耦。我在 ASP.net Webforms 中执行此操作,所以我在页面上有 jqGrid,它调用一个 ASHX,它将消化请求并调用一个单独负责 CRUD 的 WCF 服务。在服务上,我拥有在其他地方也使用的通用搜索方法。我可以在服务上为网格创建一个特定的方法,但为了 WCF 服务代码维护,我尽量不这样做。让我们看看我能用 postData 的想法做什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    相关资源
    最近更新 更多