Javascript 提神多吉格利德

Javascript 提神多吉格利德,javascript,ajax,datagrid,dojo,dojox.grid.datagrid,Javascript,Ajax,Datagrid,Dojo,Dojox.grid.datagrid,我有一个网格,它显示一些从数据库中检索到的数据。我正在以JSON字符串的形式检索数据,格式如下: [{"ActID":16,"Assigned To":"Anand","Activity Type":"fdsf","Status":"New","Assigned Date":"2012-04-20 00:00:00","Assigned Time":"1899-12-30 17:44:00","Email":"rakesh.shukla@gmail.com"},{"ActID":17,"Assi

我有一个网格,它显示一些从数据库中检索到的数据。我正在以
JSON字符串
的形式检索数据,格式如下:

[{"ActID":16,"Assigned To":"Anand","Activity Type":"fdsf","Status":"New","Assigned Date":"2012-04-20 00:00:00","Assigned Time":"1899-12-30 17:44:00","Email":"rakesh.shukla@gmail.com"},{"ActID":17,"Assigned To":"Anand","Activity Type":"fdsf","Status":"New","Assigned Date":"2012-04-20 00:00:00","Assigned Time":"1899-12-30 17:44:00","Email":"rakesh.shukla@gmail.com"}]
让我把我的代码放在第一位::

<script type="text/javascript">
function getInfoFromServer(){
        $.get("http://anandkr08:8080/2_8_2012/jsp/GetJson.jsp?random=" + new Date().getTime(), function (result) {
        success:postToPage(result),
        alert('Load was performed.');
            },"json");
    }


    function postToPage(data){
    alert(data);    
    var storedata = {
        identifier:"ActID",
        items: data
        };
    alert(storedata);

    var store1 = new dojo.data.ItemFileWriteStore({data: storedata}) ;
    var gridStructure =[[

                          { field: "ActID",
                                name: "Activity ID",
                                classes:"firstName"

                          },
                          {
                              field: "Assigned To",
                              name: "Assigned To",
                              classes: "firstName"

                          },
                          { field: "Activity Type",
                                name: "Activity Type",
                                classes:"firstName"

                          },
                          {
                              field: "Status",
                              name: "Status",
                              classes: "firstName"

                          },
                          {
                              field: "Assigned Date",
                              name: "Assigned Date",
                              classes: "firstName"

                          },
                          {
                              field: "Assigned Time",
                              name: "Assigned Time",
                              classes: "firstName"

                          },
                          {
                              field: "Email",
                              name: "SendMail",
                              formatter: sendmail,
                              classes: "firstName"

                          },
                          {
                              field: "ActID",
                              name: "Delete",
                              formatter: deleteact,
                              classes: "firstName"
                          }

                    ]
              ];
    //var grid = dijit.byId("gridDiv");
    //grid.setStore(store1);

    var grid = new dojox.grid.DataGrid({

        store: store1,
        structure: gridStructure,
        rowSelector: '30px',
        selectionMode: "single",
        autoHeight:true,
        columnReordering:true

        },'gridDiv');

    grid.startup();
    dojo.connect(grid, "onRowClick", grid, function(){
                var items = grid.selection.getSelected();
                dojo.forEach(items, function(item){

                    var v = grid.store.getValue(item, "ActID");
                    getdetailsfordialog(v);
                    function showDialog(){
                        dojo.require('dijit.Tooltip');
                        dijit.byId("terms").show();
                    }

                    showDialog();
                    }, grid);

            });
}
</script>
我认为每次点击一个按钮时都要分配一个新的id。请帮我解决这个问题。谢谢

编辑部分::

function initGrid(){
    var gridStructure =[[

                          { field: "ActID",
                                name: "Activity ID",
                                classes:"firstName"

                          },
                          {
                              field: "Assigned To",
                              name: "Assigned To",
                              classes: "firstName"

                          },
                          { field: "Activity Type",
                                name: "Activity Type",
                                classes:"firstName"

                          },
                          {
                              field: "Status",
                              name: "Status",
                              classes: "firstName"

                          },
                          {
                              field: "Assigned Date",
                              name: "Assigned Date",
                              classes: "firstName"

                          },
                          {
                              field: "Assigned Time",
                              name: "Assigned Time",
                              classes: "firstName"

                          },
                          {
                              field: "Email",
                              name: "SendMail",
                              formatter: sendmail,
                              classes: "firstName"

                          },
                          {
                              field: "ActID",
                              name: "Delete",
                              formatter: deleteact,
                              classes: "firstName"
                          }

                    ]
              ];

dojo.ready(function(){
    initGrid();
  });
我的后期功能::

function postToPage(data){
    alert(data);    
    var storedata = {
        identifier:"ActID",
        items: data
        };
    alert(storedata);

    var store1 = new dojo.data.ItemFileWriteStore({data: storedata}) ;
        grid = dijit.registry.byId("gridDiv");
        grid.set("store", store1);
        grid.filter();
        dojo.connect(grid, "onRowClick", grid, function(){
                var items = grid.selection.getSelected();
                dojo.forEach(items, function(item){

                    var v = grid.store.getValue(item, "ActID");
                    getdetailsfordialog(v);
                    function showDialog(){
                        dojo.require('dijit.Tooltip');
                        dijit.byId("terms").show();
                    }

                    showDialog();
                    }, grid);

            });
}
这里我得到了
错误
::

Cannot call method 'set' of undefined.
我想我还没有将网格定义为
dojogrid.
如下:

var grid = new dojox.grid.DataGrid

你能详细说明一下我在
initgrid()函数中还需要写些什么吗。我是否需要对HTML代码进行任何更改。我已定义结构,但未指定结构。我在同一页上有多个dojogrid。但是我的
initgrid
函数只有一个,只包含一个结构。为了能够显示其他网格,我需要进行哪些更改?我的另一个网格具有不同的结构,每个网格由
元素中的一个ID表示。如上所述,具有ID
“gridDiv”
。谢谢

之所以出现此错误,是因为每次单击按钮时都试图创建新的网格小部件。有两种可能的解决方案:手动销毁现有的小部件,或者只创建一个网格小部件实例并重用它

我认为,您不需要每次从服务器接收数据时都重新创建网格。我建议您将所有网格初始化逻辑(包括结构,但不包括存储分配)移动到新方法中,如
initGrid
,该方法将创建空网格。并称之为一页加载:

  dojo.ready(function() {
    initGrid();
  });
然后,当从服务器接收到数据时,您可以初始化数据存储并更新网格(调整
postToPage
功能):

这应该行得通。另外,我建议您不要使用内联CSS样式和
center
tag

更新:

每次数据更新时,您不需要连接到
onRowClick
事件,因此也应该在
initGrid
中完成

您的
initGrid
方法应该如下所示:

  function initGrid() {
    var gridStructure =[[
    // declare your structure here
    ]];

    var grid = new dojox.grid.DataGrid({
      structure: gridStructure,
      rowSelector: '30px',
      selectionMode: "single",
      autoHeight:true,
      columnReordering:true
    },'gridDiv');


    dojo.connect(grid, "onRowClick", grid, function(){
      // onRowClick handler
    });

    grid.startup();
  }

出现此错误是因为每次单击按钮时都试图创建新的网格小部件。有两种可能的解决方案:手动销毁现有的小部件,或者只创建一个网格小部件实例并重用它

我认为,您不需要每次从服务器接收数据时都重新创建网格。我建议您将所有网格初始化逻辑(包括结构,但不包括存储分配)移动到新方法中,如
initGrid
,该方法将创建空网格。并称之为一页加载:

  dojo.ready(function() {
    initGrid();
  });
然后,当从服务器接收到数据时,您可以初始化数据存储并更新网格(调整
postToPage
功能):

这应该行得通。另外,我建议您不要使用内联CSS样式和
center
tag

更新:

每次数据更新时,您不需要连接到
onRowClick
事件,因此也应该在
initGrid
中完成

您的
initGrid
方法应该如下所示:

  function initGrid() {
    var gridStructure =[[
    // declare your structure here
    ]];

    var grid = new dojox.grid.DataGrid({
      structure: gridStructure,
      rowSelector: '30px',
      selectionMode: "single",
      autoHeight:true,
      columnReordering:true
    },'gridDiv');


    dojo.connect(grid, "onRowClick", grid, function(){
      // onRowClick handler
    });

    grid.startup();
  }

先生,非常感谢您的回复,但到目前为止一切都不顺利。需要做出一些改变。请帮我一下。我真的需要。我已经编辑了代码。有关“编辑的部分::”的信息,请参见。谢谢。更新了我的答案。顺便说一下,dojo.ready不应该在任何函数中,在您的代码中,它似乎在initGrid函数中。它起作用了,先生:)非常感谢你的帮助。。你真的帮了我……:)顺便说一下,我做了一个小改动,使用了grid.setstore(store1)。。你告诉我的方式不是那样捕捉数据。。无论如何,再次感谢。。将来我一定会为我的Dojo相关问题向你提问……)先生,在这些链接上需要帮助。。先生,非常感谢您的回复,但到目前为止一切都不顺利。需要做出一些改变。请帮我一下。我真的需要。我已经编辑了代码。有关“编辑的部分::”的信息,请参见。谢谢。更新了我的答案。顺便说一下,dojo.ready不应该在任何函数中,在您的代码中,它似乎在initGrid函数中。它起作用了,先生:)非常感谢你的帮助。。你真的帮了我……:)顺便说一下,我做了一个小改动,使用了grid.setstore(store1)。。你告诉我的方式不是那样捕捉数据。。无论如何,再次感谢。。将来我一定会为我的Dojo相关问题向你提问……)先生,在这些链接上需要帮助。。
  function initGrid() {
    var gridStructure =[[
    // declare your structure here
    ]];

    var grid = new dojox.grid.DataGrid({
      structure: gridStructure,
      rowSelector: '30px',
      selectionMode: "single",
      autoHeight:true,
      columnReordering:true
    },'gridDiv');


    dojo.connect(grid, "onRowClick", grid, function(){
      // onRowClick handler
    });

    grid.startup();
  }