草庐IT

关于 jquery:jqGrid addRowData 不适用于网格作为子网格

codeneng 2023-03-28 原文

jqGrid addRowData doesn't work with grid as subgrid

我想在 jqGrid 中使用网格作为子网格,因为我读到"简单子网格"不允许单元格编辑。

我正在成功地用 dataType 函数填充主网格,我正在尝试对子网格执行相同的操作,但子网格显示没有数据,我不知道为什么,因为我已调试并且我从正确捕获数据Web 服务,但是当我浏览数据时,对子网格执行 addRowData 似乎没有效果。

我正在使用 ASP.Net 2.0 Web 服务和 JSON,这是客户端代码,知道吗:-S?谢谢:-)

编辑:

我加了一个:

1
2
3
4
5
6
7
8
function ReceivedClientData(data) {
    var thegrid = $("#" + gridId);
    if ($(thegrid).length == 0) alert('NOT EXISTS');

    thegrid.clearGridData();
    for (var i = 0; i < data.length; i++)
        thegrid.addRowData(i + 1, data[i]);  
}

我收到一个不存在的子网格,我不知道是否是检查选择器是否存在的最佳方法,但这意味着我找不到由 jqgrid 创建的"动态"我捕获了ajax回发?如何填充子网格?

编辑 2:

我认为我的子网格 ID 有误,现在我将 grid_id 保存在一个变量中

1
2
subGridRowExpanded: function(subgrid_id, row_id) {
            subGridID = subgrid_id;

并在回调时使用它,但是当我尝试添加行数据时,我从 jqgrid.js 接收到 p.rownumbers 为空。 :-S 有什么建议吗?

1
2
3
4
5
6
7
8
9
function ReceivedClientDataForSubGrid(data) {
    var thegrid = $("#" + subGridID);

    if ($(thegrid).length == 0) alert('NOT EXISTS');

    thegrid.clearGridData();
    for (var i = 0; i < data.length; i++)
        thegrid.addRowData(i + 1, data[i]);
}

将"编辑 3"移动到答案以将问题标记为已回答

我解决了,我访问的 ID 不正确,正确的 ID 是 var thegrid = $("#" subGridID "_t");

完整的客户端代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
var gridId ="table";
$(function() {
    $("#"+gridId).jqGrid({
        datatype: function(pdata) { getData(pdata); },
        height: 250,
        colNames: ['Nombre Objetivo', 'Tipo Objetivo', 'Objetivo Tipo 1', 'Objetivo Tipo 2', 'Objetivo Tipo 3', 'Autoevaluacion', 'Resultado Final', 'Actions'],
        colModel: [
                        { name: 'ObjetivoNombre', width: 200, sortable: false },
                        { name: 'TipoObjetivo', width: 200, sortable: false, editable: true, edittype: 'select', editoptions: { value: { 1: '1', 2: '2', 3: '3'}} },
                        { name: 'ObjetivoTipo1', width: 200, sortable: false, hidden: true },
                        { name: 'ObjetivoTipo2', width: 200, sortable: false, hidden: true },
                        { name: 'ObjetivoTipo3', width: 200, sortable: false, hidden: true },
                        { name: 'Autoevaluacion', width: 200, sortable: false, hidden: false, editable: true },
                        { name: 'ResultadoFinal', width: 200, sortable: false, hidden: false, editable: true },
                        { name: 'act', index: 'act', width: 75, sortable: false }
                    ],
        cellEdit: true,
        cellsubmit: 'clientArray',          
        pager: '#pager',
        rowNum: 10,
        rowList: [10, 20, 30],
        sortname: 'Nombre Objetivo',
        sortorder: 'desc',
        viewrecords: true,
        gridComplete: function() {
            var ids = jQuery("#table").jqGrid('getDataIDs');
            var idsLength = ids.length;
            for (var i = 0; i < idsLength; i++) {
                var cl = ids[i];
                de ="<input style='height:22px;width:20px;' type='button' value='D' onclick="deleteRow('" + cl +"');" />";
                jQuery("#table").jqGrid('setRowData', ids[i], { act: de });
            }
        },
        subGrid: true,          
        subGridRowExpanded: function(subgrid_id, row_id) {
            var subgrid_table_id;
            subgrid_table_id = subgrid_id +"_t";
            jQuery("#" + subgrid_id).html("<table id='" + subgrid_table_id +"' class='scroll'></table>");
            jQuery("#" + subgrid_table_id).jqGrid(
           {
               datatype: function(pdata) { getDataSubGrid(pdata); },
               colNames: ['Nombre Objetivo', 'Tipo Objetivo', 'Objetivo Tipo 1', 'Objetivo Tipo 2', 'Objetivo Tipo 3', 'Autoevaluacion', 'Resultado Final'],//, 'Actions'],
               colModel: [
                        { name: 'ObjetivoNombre', width: 200, sortable: false },
                        { name: 'TipoObjetivo', width: 200, sortable: false, editable: true, edittype: 'select', editoptions: { value: { 1: '1', 2: '2', 3: '3'}} },
                        { name: 'ObjetivoTipo1', width: 200, sortable: false, hidden: true },
                        { name: 'ObjetivoTipo2', width: 200, sortable: false, hidden: true },
                        { name: 'ObjetivoTipo3', width: 200, sortable: false, hidden: true },
                        { name: 'Autoevaluacion', width: 200, sortable: false, hidden: false, editable: true },
                        { name: 'ResultadoFinal', width: 200, sortable: false, hidden: false, editable: true }
                    ],
               height: 100,
               rowNum: 20,
               sortname: 'num',
               sortorder:"asc"                  
           });
        },
        caption:"jQGrid Ejemplo"
    })      
});
        //AJAX GET DATA FROM WS
    function getData(pData) {
        gridId ="table";
        $.ajax({
            type: 'POST',
            contentType:"application/json; charset=utf-8",
            url: '<%= ResolveClientUrl("~/WebService.asmx/ObtenerDatosDPO") %>',
            data: '{}',
            dataType:"json",
            success: function(data, textStatus) {
                    ReceivedClientData(JSON.parse(getMain(data)).rows);
            },
            error: function(data, textStatus) {
                alert('An error has occured retrieving data!');
            }
        });
    }
    function getDataSubGrid(pData) {
        gridId ="table_t";
        $.ajax({
            type: 'POST',
            contentType:"application/json; charset=utf-8",
            url: '<%= ResolveClientUrl("~/WebService.asmx/ObtenerDatosDPOSubGrid") %>',
            data: '{}',
            dataType:"json",
            success: function(data, textStatus) {
                ReceivedClientData(JSON.parse(getMain(data)).rows);
            },
            error: function(data, textStatus) {
                alert('An error has occured retrieving data subgrid!');
            }
        });
    }

    //COMMON FUNCTIONS
    function ReceivedClientData(data) {
        var thegrid = $("#"+gridId);

        thegrid.clearGridData();
        for (var i = 0; i < data.length; i++)
            thegrid.addRowData(i + 1, data[i]);
    }      
    function getMain(dObj) {
        if (dObj.hasOwnProperty('d'))
            return dObj.d;
        else
            return dObj;
    }

  • 您应该将自己的答案标记为已接受的答案,而不是将您的标题编辑为 [已解决]。

有关关于 jquery:jqGrid addRowData 不适用于网格作为子网格的更多相关文章

  1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  2. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  3. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  4. jquery - 我的 jquery AJAX POST 请求无需发送 Authenticity Token (Rails) - 2

    rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送

  5. ruby - 字符串文字中的转义状态作为 `String#tr` 的参数 - 2

    对于作为String#tr参数的单引号字符串文字中反斜杠的转义状态,我觉得有些神秘。你能解释一下下面三个例子之间的对比吗?我特别不明白第二个。为了避免复杂化,我在这里使用了'd',在双引号中转义时不会改变含义("\d"="d")。'\\'.tr('\\','x')#=>"x"'\\'.tr('\\d','x')#=>"\\"'\\'.tr('\\\d','x')#=>"x" 最佳答案 在tr中转义tr的第一个参数非常类似于正则表达式中的括号字符分组。您可以在表达式的开头使用^来否定匹配(替换任何不匹配的内容)并使用例如a-f来匹配一

  6. ruby - inverse_of 是否适用于 has_many? - 2

    当我使用has_one时,它​​工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290

  7. ruby-on-rails - 应用程序的名称是否可以作为变量使用? - 2

    当我创建一个Rails应用程序时,控制台:railsnewfoo我的代码可以使用字符串“foo”吗?puts"Yourapp'snameis"+app_name_bar 最佳答案 Rails.application.class将为您提供应用程序的全名(例如YourAppName::Application)。从那里您可以使用Rails.application.class.parent获取模块名称。 关于ruby-on-rails-应用程序的名称是否可以作为变量使用?,我们在StackOve

  8. ruby-on-rails - 使用作为方法的值在 ruby​​ 中搜索哈希 - 2

    我在搜索我的值是方法的散列时遇到问题。我只是不想运行plan_type与键匹配的方法。defmethod(plan_type,plan,user){foo:plan_is_foo(plan,user),bar:plan_is_bar(plan,user),waa:plan_is_waa(plan,user),har:plan_is_har(user)}[plan_type]end目前如果我传入“bar”作为plan_type,所有方法都会运行,我怎么能只运行plan_is_bar方法呢? 最佳答案 这个变体怎么样?defmethod

  9. ruby - 无法在 Ruby 中将 ffmpeg 作为子进程运行 - 2

    我正在尝试使用以下代码通过将ffmpeg实用程序作为子进程运行并获取其输出并解析它来确定视频分辨率:IO.popen'ffmpeg-i'+path_to_filedo|ffmpegIO|#myparsegoeshereend...但是ffmpeg输出仍然连接到标准输出并且ffmepgIO.readlines是空的。ffmpeg实用程序是否需要一些特殊处理?或者还有其他方法可以获得ffmpeg输出吗?我在WinXP和FedoraLinux下测试了这段代码-结果是一样的。 最佳答案 要跟进mouviciel的评论,您需要使用类似pope

  10. jquery - 如何将 AJAX 变量从 jQuery 传递到他们的 Controller ? - 2

    我有一个电子邮件表格。但是我正在制作一个测试电子邮件表单,用户可以在其中添加一个唯一的电子邮件,并让电子邮件测试将其发送到该特定电子邮件。为了简单起见,我决定让测试电子邮件通过ajax执行,并将整个内容粘贴到另一个电子邮件表单中。我不知道如何将变量从我的HAML发送到我的Controllernew.html.haml-form_tagadmin_email_blast_pathdoSubject%br=text_field_tag'subject',:class=>"mass_email_subject"%brBody%br=text_area_tag'message','',:nam

随机推荐