2010-12-15 41 views
6

當我設置gridview的真正(GridView控件:真)在我們的jqGrid增加jqGrid的表現,就像afterInsertRow方法或其他類似的方法不被執行。 以下是我jgGrid的代碼:的afterInsertRow:函數(IDS)方法不執行,當我使用的GridView:真

jQuery("#displaylistGrid").jqGrid({ 
    url: contextRoot + '/StandardProxy/displayListService?userRole='+ 
     userRole+'&userName='+userName+'&userId='+userId+ 
     '&duration='+displayDuration+'&wicNo='+wicNo+ 
     '&displayName='+dlDisplayName+'&displayNameArr='+displayNameArr+ 
     '&pointValue='+pValue+'&locationId='+locId+'&locationCode='+ 
     locCode+'&serviceType=forecast', 
    datatype: 'json', 
    colNames: ["CM Name", "Display ", "Loc. Pt.","Max. Ben." ,"Display Name", 
       "Items w/Fcst", "Units", "Sales $", "Profit $", "GP%", "Units", 
       "Sales $", "Profit $", "GP%","Hidden","Hidden1","Hidden2", 
       "Start Date and End Date", "Hidden4"], 
    colModel: [ 
     { name: "cm_name",  index: "cm_name",  sorttype: "text", width: 120, 
      resizable: true }, 
     { name: "ds_location", index: "ds_location", sorttype: "text", width: 120, 
      resizable: true }, 
     { name: "ds_symbol", index: "ds_symbol", sorttype: "text", width: 50, 
      align: "center",  resizable: true }, 
     { name: "ds_benchMark", index: "ds_benchMark",sorttype: "text", width: 50, 
      align: "center",  resizable: true }, 
     { name: "ds_name",  index: "ds_name",  sorttype: "text", width: 230, 
      resizable: true }, 
     { name: "ds_ItemFrcst", index: "ds_ItemFrcst",sorttype: "int", width: 60, 
      align: "center",  resizable: true, 
      unformat: addDemoninatorSortingFormatter }, 
     { name:"ds_units_promo",index:"ds_units_promo",sorttype:"float",width: 85, 
      align: "right",  unformat : spaceFormatter }, 
     { name:"ds_sales_promo",index:"ds_sales_promo",sorttype:"float",width: 95, 
      align: "right",  unformat : spaceFormatter }, 
     { name: "displaylistGrid_ds_profit_promo", 
      index: "displaylistGrid_ds_profit_promo", 
      sorttype: "float", width: 95,    align: "right", 
      unformat : spaceFormatter }, 
     { name:"ds_gp_pct_promo",index:"ds_gp_pct_promo",sorttype:"int",width: 50, 
      align: "right",  unformat : spaceFormatter }, 
     { name: "ds_units_per_store_week", 
      index: "ds_units_per_store_week",   sorttype:"float",width: 85, 
      align: "right",  unformat : spaceFormatter }, 
     { name: "ds_sales_per_store_week", 
      index: "ds_sales_per_store_week", 
      sorttype: "float", width: 90,    align: "right", 
      unformat : spaceFormatter }, 
     { name: "ds_profit_per_store_week", 
      index: "ds_profit_per_store_week", 
      sorttype: "float", width: 90,    align: "right", 
      unformat : spaceFormatter }, 
     { name: "ds_gp_pct_per_store_week", 
      index: "ds_gp_pct_per_store_week", 
      sorttype: "float", width: 40,    align: "right", 
      unformat : spaceFormatter }, 
     { name: "hidden1",  index: "hidden1",  sorttype: "int", 
      align: "center",  hidden: true }, 
     { name: "hidden2",  index: "hidden2",  sorttype: "text", 
      align: "center",  hidden: true }, 
     { name: "hidden3",  index: "hidden3",  sorttype: "int", 
      align: "center",  hidden: true }, 
     { name:"forecast_dates",index:"forecast_dates",sorttype: "text", 
      align: "center",  hidden: true }, 
     { name: "hidden4",  index: "hidden4",  sorttype: "text", 
      align: "center",  hidden: false } 
    ], 
    onSelectRow: function(ids){ 
     //checkDisplayDetail(); 
     //setDefaultValuesToTheSortingParams(); 
     var dropDownVal = document.getElementById("displayDetailSelection").value; 
     var subTabName = document.getElementById("detailSubTabName").value; 
     if(subTabName=="Active") 
      dropDownVal = document.getElementById("displayDetailActiveSelection").value; 
     reLoadDisplayDetailData(ids,'forecast',dropDownVal,subTabName); 
    }, 
    afterInsertRow : function(ids) { // shows custom tooltip 
     var customToolTip = jQuery("#displaylistGrid").getCell(ids,'ds_name') + 
        " -- " + jQuery("#displaylistGrid").getCell(ids,'hidden4'); 
     $("#displaylistGrid").setCell(ids,'ds_name', '','',{title:customToolTip}); 
    }, 
    gridComplete : function(){ 
     if($("#isForecastedSalesGridLoaded").val()=="no"){ 
      $("#jqgh_displaylistGrid_ds_profit_promo").click(); 
     } 
     else{ 
      $("#isForecastedSalesGridLoaded").val("no"); 
     } 
    }, 
    onSortCol : function(){ 
     $("#isForecastedSalesGridLoaded").val("yes"); 
    }, 
    width: 983, 
    rowNum: 999, 
    height: eval(heightOfDispListGrid()+7), 
    toolbar: [true, "top"], 
    viewrecords: true, 
    treeIcons: {leaf: "ui-icon-document-b"}, 
    treeGrid: true, 
    treeGridModel: 'nested', 
    ExpandColumn : 'Description', 
    ExpandColClick: true, 
    loadonce:false, 
    refresh : true, 
    shrinkToFit: true, 
    gridview:true,   
    sortorder:"asc", 
    sortname:"displaylistGrid_ds_profit_promo" 
}); 

以下爲afterInsertRow方法的代碼:

afterInsertRow : function(ids) { // shows custom tooltip 
    var customToolTip = jQuery("#displaylistGrid").getCell(ids,'ds_name') + " -- " + 
         jQuery("#displaylistGrid").getCell(ids,'hidden4') ; 
    $("#displaylistGrid").setCell(ids,'ds_name', '','',{title:customToolTip}); 
}, 

前面的代碼用於顯示定製工具提示。請告訴我我做錯了什麼。

請幫我

感謝, DISMGMT

回答

4

gridview:true使用的感以下。在「網格視圖」模式中,大多數網格包含將被創建爲,作爲字符串。爲了準確地爲每個網格行生成一個帶有HTML標記的子串數組,我們從字符串數組中爲join('')創建一個字符串,然後創建一個代表網格的DOM對象。它提高了性能,不僅因爲更好地處理長字符串(join('')),還因爲減少了使用DOM對象的工作,這與使用字符串一樣慢。

所以我建議你根本不要使用afterInsertRow。取而代之的是,你可以成功地做同樣對於下面的代碼

var myGrid = jQuery("#displaylistGrid"); 
var ids = myGrid.jqGrid('getDataIDs'); 
for (var i = 0; i < ids.length; i++) { 
    var id=ids[i]; 
    var customToolTip = myGrid.jqGrid('getCell',ids,'ds_name') + " -- " + 
         myGrid.jqGrid('getCell',ids,'hidden4'); 
    myGrid.jqGrid('setCell',ids,'ds_name', '','',{title:customToolTip}); 
} 

,你可以包括在gridCompleteloadComplete的。

您將使用custom formatterds_name進行歸檔的最佳性能,您需要在其中設置自定義工具提示。這個實現非常簡單,因爲您的自定義格式化程序將以rowObject參數的形式接收服務器數據的行,它們將以相同的形式從服務器接收(如數組或對象)。正確hidden4將立即可用(我建議您閱讀this answer瞭解更多詳情)。

已更新:答案很古老。 jqGrid提供了許多從性能角度來看更好的替代實現方式。頁面上的每個更改都遵循瀏覽器reflow。所以在循環中使用setCell無效。使用cellattrrowattr並繼續使用gridview: true的好處在the answer中有描述。

The answer演示使用cellattr而不是setCell在當前答案中使用的單元格上設置title的非常有效的方法。 Another answer提供了一個更常用的例子來使用cellattr。要設置網格行的屬性,可以使用rowattr回調。代碼示例請參見the answer

相關問題