天天看點

jqGrid 使用案例及筆記2、事件

jqGrid 是一個用來顯示網格資料的jQuery插件,通過使用jqGrid可以輕松實作前端頁面與背景資料的ajax異步通信。

一、要引用的檔案

要使用jqGrid,首先頁面上要引入如下css與js檔案。

1、css

<link href="/css/ui.jqgrid.css" target="_blank" rel="external nofollow"  rel="stylesheet" type="text/css" />

           

2、js

<script src='/Scripts/js/jquery-2.0.3.min.js' type="text/javascript"></script>
<script src='/Scripts/js/jqGrid/jquery.jqGrid.min.js' type="text/javascript"></script>
<script src='/Scripts/js/jqGrid/i18n/grid.locale-en.js' type="text/javascript"></script>

           

  

二、使用要點說明

1、擷取值

(1)、擷取單個id

擷取行号,有這種方式:

var rowid = $("#grid-table").jqGrid("getGridParam", "selrow");

但是經過實際驗證,這種方式不可行,當選中行,再點選同一行會出現擷取不到行号的情況。

最後先在js最外部定義一個變量selId,然後使用如下代碼在選中行時指派:

onSelectRow: function (rowid, status) {
    selId = rowid;  //給最外層的selId指派
  }
           

(2)、擷取多個選中行的id

其輸出格式是逗号分隔的id,如:

1,2,3,4,5

(3)、獲得所有行的ID數組

var ids = $("jqgridtableid").jqGrid('getDataIDs');
           

(4)、擷取行資料

如果想擷取選擇的行的資料,隻要傳入rowId即可,如下:

var rowData = $('#gridTable').jqGrid('getRowData',rowId);
           

而這個rowData是一個對象,如果要擷取選擇的行的這個對象的屬性值,如name的值,需如下:

var Name= rowData.name;
           

(5)、擷取單元格資料

var celldata = $("jqgridtableid").jqGrid('getCell',id,colnum);
           

(6)、設定行選中

//設定選中行,可設定多行選中:
$("jqgridtableid").jqGrid('setSelection',id1);
$("jqgridtableid").jqGrid('setSelection',id2);
           

2、自定義分頁、資料互動

何謂自定義?就是允許你用你自己喜歡的js對象與後端做資料互動。如jsonReader。

如果這個地方的Id設定錯了,那麼jqGrid就會自動以行号作為Id,這樣會影響删除的。如果根據Id來删,很有可能删錯行。

jsonReader: {
    id: "Id", //相當于設定主鍵
    root: "JsonArray",    //Json資料
    total: "TotalPage",   //總頁數
    page: "CurrentPage",  //目前頁
    records: "TotalRecord",//總記錄數
    repeatitems: false
  },
           

這樣一來,對于資料表格,在C#中,我可以用一個泛型類,就能夠與jqGrid表格進行互動(其中,包括了分頁資訊,資料内容)。

/// <summary>
 /// 分頁ViewModel
 /// </summary>
 public class jQGrid<T> where T : class
 {
  public jQGrid()
  { }
 
  /// <summary>
  /// 帶4個參數的構造函數
  /// </summary>
  /// <param name="rows">每頁顯示行數</param>
  /// <param name="currentPage">目前頁</param>
  /// <param name="totalRecord">結果總記錄數</param>
  /// <param name="jsonArray">JSON資料</param>
  public jQGrid(int rows, int currentPage, int totalRecord, IList<T> jsonArray)
  {
   TotalPage = this.CalculateTotalPage(rows, totalRecord);
   CurrentPage = currentPage;
   TotalRecord = totalRecord;
   JsonArray = jsonArray;
  }
 
  public int TotalPage { get; set; }
  public int CurrentPage { get; set; }
  public int TotalRecord { get; set; }
  public IList<T> JsonArray { get; set; }
 
  /// <summary>
  /// 根據每頁顯示數與總記錄數計算出總頁數
  /// </summary>
  /// <param name="rows">每頁顯示數</param>
  /// <param name="totalRecord">結果總記錄數</param>
  /// <returns></returns>
  public int CalculateTotalPage(int rows, int totalRecord)
  {
   return Convert.ToInt32(Math.Ceiling((double)totalRecord / (double)rows));
  }
 }
           

  

3、搜尋的實作

搜尋的實作主要通過jqGrid的postData向伺服器端傳遞參數。

$("#btnSearch").click(function () {
    var rules = "";
    $("#multipleSearchDialog").each(function (i) {
      $(".div-padding :input").each(function () {
        if ($(this).val()) {
          rules += '"' + $(this).attr("name") + '":"' + $(this).val() + '"';
        }
      })
    });
  ParamJson = '{' + rules + '}';
  var postData = $("#grid-table").jqGrid("getGridParam", "postData");
  $.extend(postData, { Param: ParamJson });
  $("#grid-table").jqGrid("setGridParam", { search: true }).trigger("reloadGrid", [{ page: 1}]); //重載JQGrid
  });
           

搜尋功能主要通過postData向伺服器端傳遞資料。後端擷取參數進而進行處理:

Dictionary<string, string> DicParam = new Dictionary<string, string>();
  string Param = Convert.ToString(Request["Param"]);
  if (!string.IsNullOrEmpty(Param))
  {
    System.Web.Script.Serialization.JavaScriptSerializer sr = new System.Web.Script.Serialization.JavaScriptSerializer();
    DicParam = sr.Deserialize(Param, typeof(Dictionary<string, string>)) as Dictionary<string, string>;
  }
           

這樣就擷取到了查詢參數的鍵值對,至于參數怎麼用,一般都是用于sql的where子句。

三、更多jqGrid配置屬性說明

1、屬性

參數名稱 類型 描述 預設值 是否可以被修改
ajaxGridOptions object 對ajax參數進行全局設定,可以覆寫ajax事件:error,complete 和 beforeSend 空值
ajaxGridOptions object 對ajax參數進行全局設定 空值
ajaxSelectOptions object 對ajax的select參數進行全局設定,設定editoptions跟searchoptions 參數的select屬性值 空值
altclass String 用于表格行交替變色的class屬性。你可以定義自己的class來替代預設值。隻有當altRows屬性設定為true時,該屬性才起作用 ui-priority-secondary 是,但需要重新加載
altRows boolean 設定表格是否允許行交替變色值 false 是,需重新加載
autoencode boolean 當為 ture 時對url進行編碼 false
autowidth boolean 如果為ture時,則當表格在首次被建立時會根據父元素比例重新調整表格寬度。如果父元素寬度改變,為了使表格寬度能夠自動調整則需要實作函數:setGridWidth false
caption String 定義表格名稱 空值 否,但是可以用api修改
cellLayout integer 定義了單元格padding + border 寬度。通常不必修改此值。初始值為5,paddingLef?2+paddingRight?2+borderLeft?1=5 5
cellEdit boolean 啟用或者禁用單元格編輯功能 false
cellsubmit String 定義了單元格内容儲存位置:“remote”,“clientArray” ‘remote'
cellurl String 單元格送出的url 空值
colModel array 對顯示列屬性的設定,是一個數組對象。常用到的屬性:name 列顯示的名稱;index 傳到伺服器端用來排序用的列名稱;width 列寬度;align 對齊方式;sortable 是否可以排序 空值
colNames array[] 放置列名稱的數組,必須與colModel大小相同 空數組
datastr String xmlstring或者jsonstring 空值
datatype string 從伺服器端傳回的資料類型,(表格期望接收的資料類型)。可選類型:xml,xmlstring,json,local,function xml
deselectAfterSort boolean 隻有當datatype為local時起作用。當排序時不選擇目前行 true
direction string 表格中文字的顯示方向,從左向右(ltr)或者從右向左(rtr)。 ltr
editurl string 定義對form編輯時的url 空值
emptyrecords string 當傳回的資料行數為0時顯示的資訊。隻有當屬性 viewrecords 設定為ture時起作用 在語言包中
ExpandColClick boolean 當為true時,點選展開行的文本時,treeGrid就能展開或者收縮,不僅僅是點選圖檔 true
ExpandColumn string 指定那列來展開tree grid,預設為第一列,隻有在treeGrid為true時起作用 空值
footerrow boolean 當為true時,會在翻頁欄之上增加一行 false
forceFit boolean 當為ture時,調整列寬度不會改變表格的寬度。當shrinkToFit 為false時,此屬性會被忽略 false
gridstate string 定義目前表格的狀态:'visible' or 'hidden' visible
gridview boolean 構造一行資料後添加到grid中,如果設為true則是将整個表格的資料都構造完成後再添加到grid中,但treeGrid, subGrid, or afterInsertRow 不能用 false
height mixed 表格高度,可以是數字,像素值或者百分比 150
hiddengrid boolean 當為ture時,表格不會被顯示,隻顯示表格的标題。隻有當點選顯示表格的那個按鈕時才會去初始化表格資料。隻有當caption 屬性不為空而且hidegrid為ture時才起作用 false
hidegrid boolean 啟用或者禁用控制表格顯示、隐藏的按鈕,隻有當caption 屬性不為空時起效 true
hoverrows boolean 當為false時mouse hovering會被禁用 false
jsonReader array 描述json期望資料格式的數組。
lastpage integer 隻讀屬性,定義了總頁數
lastsort integer 隻讀屬性,定義了最後排序列的索引,從0開始
loadonce boolean 如果為ture則資料隻從伺服器端抓取一次,之後所有操作都是在用戶端執行,翻頁功能會被禁用 false
loadtext string 當請求或者排序時所顯示的文字内容 Loading....
loadui string 當執行ajax請求時要幹什麼。disable禁用ajax執行提示;enable預設,當執行ajax請求時的提示; block啟用Loading提示,但是阻止其他操作 enable
mtype string 請求的類型:(“POST” or “GET”) GET
multikey string 隻有在multiselect設定為ture時起作用,定義使用那個key來做多選。shiftKey,altKey,ctrlKey 空值
multiboxonly boolean 隻有當multiselect = true.起作用,當multiboxonly 為ture時隻有選擇checkbox才會起作用, false
multiselect boolean 定義是否可以多選 false
multiselectWidth integer 當multiselect為true時設定multiselect列寬度 20
page integer 設定初始的頁碼 1
pager mixed 指定分頁欄對象,必須為一個有效的html元素。可以是'pager', '#pager', jQuery('#pager').推薦用'#pager' 空值
pagerpos string 指定分頁欄的位置 center
pgbuttons boolean 是否顯示翻頁按鈕 true
pginput boolean 是否顯示跳轉頁面的輸入框 true
pgtext string 目前頁資訊 語言包中設定
prmNames array Default valuesprmNames: {page:“page”,rows:“rows”, sort: “sidx”,order: “sord”, search:“_search”, nd:“nd”, npage:null} 當參數為null時不會被發到伺服器端 none
postData array 此數組内容直接指派到url上,參數類型:{name1:value1…} 空array
reccount integer 隻讀屬性,定義了grid中确切的行數。通常情況下與records屬性相同,但有一種情況例外,假如rowNum=15,但是從伺服器端傳回的記錄數是20,那麼records值是20,但reccount值仍然為15,而且表格中也隻顯示15條記錄。
recordpos string 定義了記錄資訊的位置: left, center, right right
records integer 隻讀屬性,定義了傳回的記錄數 none
recordtext string 顯示記錄數資訊。{0} 為記錄數開始,{1}為記錄數結束。 viewrecords為ture時才能起效,且總記錄數大于0時才會顯示此資訊 語言包
resizeclass string 定義一個class到一個列上用來顯示列寬度調整時的效果 空值
rowList array[] 一個數組用來調整表格顯示的記錄數,此參數值會替代rowNum參數值傳給伺服器端。如果為空則不顯示,設定格式:[10,20,30]。 []
rownumbers boolean 如果為ture則會在表格左邊新增一列,顯示行順序号,從1開始遞增。此列名為'rn'. false
rowNum integer 設定表格中顯示的記錄數,參數會被自動傳到背景。如果此參數設為10,但是從伺服器端傳回15條記錄,那麼在表格中隻會顯示10條記錄。如果設為-1則禁用此檢查 20
rownumWidth integer 如果rownumbers為true,則可以設定column的寬度 25
savedRow array 隻讀屬性,隻用在編輯模式下儲存資料 空值
scroll boolean or integer 建立一個動态滾動的表格,當為true時,翻頁欄被禁用,使用垂直滾動條加載資料,且在首次通路伺服器端時将加載所有資料到用戶端。當此參數為數字時,表格隻控制可見的幾行,所有資料都在這幾行中加載 false
scrollOffset integer 設定垂直滾動條寬度 18
scrollrows boolean 當為true時讓所選擇的行可見 false
selarrrow array-[] 隻讀屬性,用來存放目前選擇的行 empty array []
selrow string 隻讀屬性,最後選擇行的id null
shrinkToFit boolean 此屬性用來說明當初始化列寬度時候的計算類型,如果為ture,則按比例初始化列寬度。如果為false,則列寬度使用colModel指定的寬度 true
sortable boolean 是否可排序 false
sortname string 排序列的名稱,此參數會被傳到背景 空字元串
sortorder string 排序順序,升序或者降序(asc or desc) asc
subGrid boolean 是否使用suggrid false
subGridModel array-[] subgrid模型 empty array
subGridType mixed 如果為空則使用表格的dataType null
subGridUrl string 加載subgrid資料的url,jqGrid會把每行的id值加到url中 空值
subGridWidth integer subgrid列的寬度 20
toolbar array 表 格的工具欄。數組中有兩個值,第一個為是否啟用,第二個指定工具欄位置(相對于body layer),如:[true,”both”] 。工具欄位置可選值:“top”,”bottom”, “both”. 如果工具欄在上面,則工具欄id為“t_”+表格id;如果在下面則為 “tb_”+表格id;如果隻有一個工具欄則為 “t_”+表格id [false,'']
totaltime integer 隻讀屬性,計算加載資料的時間。目前支援xml跟json資料
treedatatype mixed 資料類型,通常情況下與datatype相同,不會變 null
treeGrid boolean 啟用或者禁用treegrid模式 false
treeGridModel string treeGrid所使用的方法 nested
treeIcons array 樹的圖示,預設值:{plus:'ui-icon-triangle-1-e',minus:'ui-icon-triangle-1-s',leaf:'ui-icon-radio-off'}
treeReader array 擴充表格的colModel且加在colModel定義的後面
tree_root_level numeric root元素的級别,
url string url null
userData array 從request中取得的一些使用者資訊 empty array
userDataOnFooter boolean 當為true時把userData放到底部,用法:如果userData的值與colModel的值相同,那麼此列就顯示正确的值,如果不等那麼此列就為空 false
viewrecords boolean 是否要顯示總記錄數 false
viewsortcols array 定 義排序列的外觀跟行為。資料格式:[false,'vertical',true].第一個參數是說,是否都要顯示排序列的圖示,false就是隻顯示當 前排序列的圖示;第二個參數是指圖示如何顯示,vertical:排序圖示垂直放置,horizontal:排序圖示水準放置;第三個參數指單擊功 能,true:單擊列可排序,false:單擊圖示排序。說明:如果第三個參數為false則第一個參數必須為ture否則不能排序
width number 如果設定則按此設定為主,如果沒有設定則按colModel中定義的寬度計算 none
xmlReader array 對xml資料結構的描述
url 擷取資料的位址
datatype 從伺服器端傳回的資料類型,預設xml。可選類型:xml,local,json,jsonnp,script,xmlstring,jsonstring,clientside
mtype ajax送出方式。POST或者GET,預設GET
colNames 列顯示名稱,是一個數組對象。
colModel 對顯示列屬性的設定,是一個數組對象。常用到的屬性:name 列顯示的名稱;index 傳到伺服器端用來排序用的列名稱;width 列寬度;align 對齊方式;sortable 是否可以排序
pager 定義翻頁用的導航欄,必須是有效的html元素。翻頁工具欄可以放置在html頁面任意位置
rowNum 在grid上顯示記錄條數,這個參數是要被傳遞到背景
rowList 一個下拉選擇框,用來改變顯示記錄數,當選擇時會覆寫rowNum參數傳遞到背景
sortname 預設的排序列。可以是列名稱或者是一個數字,這個參數會被送出到背景
viewrecords 定義是否要顯示總記錄數
caption 表格名稱

2、事件

事件 參數 描述
afterInsertRow

rowid 

rowdata 

rowelem

此事件發生在每次插入行後

rowid 為插入的行ID

rowdata 是被插入行的資料數組。格式為name:value對,name在colModel定義

rowelem 是應答元素。xml為xml行,json為所有行資料。

注意:若gridview 為true,此事件不會發生

beforeRequest none 此事件發生在任何資料請求前,但當datatype為function時不發生。
beforeSelectRow rowid, e

此事件發生在使用者點選行,選中該行前。

rowid 為行的ID,e為事件對象

該事件将傳回布爾值true(行被選中)或false(行未被選中)。

gridComplete none 此事件發生在表格所有資料裝入和程序完成後。與datatype參數及排序分頁等無關。
loadBeforeSend

xhr,

settings

此事件發生在XMLHttpRequest被發送前,用于修改對象屬性(如headers)。 xhr 為XMLHttpRequest對象。
loadComplete data 此事件發生在每個伺服器請求後。xhr 為XMLHttpRequest對象。
loadError

xhr,

status,

error

此事件在請求失敗時發生。事件有3個參數:

xhr 為XMLHttpRequest對象;

Satus 為錯誤類型描述;error 為錯誤對象。

onCellSelect

rowid,

iCol, 

cellcontent,

e

此事件在點選表格特定單元格時發生。

rowid 為行ID;iCol 為列索引;

cellcontent 為單元格中内容;

e 點選事件對象。

ondblClickRow

rowid, 

iRow, 

iCol, 

e

此事件發生在行輕按兩下後發生。

rowid為行ID;iRow 為行索引(勿與rowid混淆);

iCol為列索引;

e 為事件對象。

onHeaderClick gridstate 此事件發生在點選顯示或隐藏表格後發生(hidegrid為true) gridstate為表格狀态,有visible和hidden兩個值
onPaging pgButton 此事件發生在點選page button後,填充資料前,及使用者輸入一個與目前頁頁碼不同的新頁碼并回車時。
onRightClickRow

rowid, 

iRow, 

iCol, 

e

此事件發生在右擊行後。(此事件在Opera浏覽器中無效)

rowid為行ID;iRow為行索引(勿與rowid混淆)

iCol為列索引;

e為事件對象

onSelectAll

aRowids,

status

此事件發生在點選标題的複選框時發生(multiselect為true)

aRowids 標明行ID的數組(哪些行的複選框與頭複選框相同)

status 頭複選框的標明的布爾值,true為選中,false為

onSelectRow

rowid,

status

此事件發生在行點選後

rowid 為行ID;

status  為選擇狀态。當multiselect為true時使用,當行被選中時傳回true;為選中時傳回false。

onSortCol

index,

iCol,

sortorder

此事件發生在列排序被點選之後,資料排序前

index 為colModel 中定義的索引名iCol 為列的索引号

sortorder 為新的排序方式,asc或desc

resizeStart event, index 此事件發生在列被重新定義寬度時。 event 為事件對象;index 為在colModel 中定義的列索引。
resizeStop newwidth, index

此事件發生在列被重新定義寬度後。

newwidth 為新的列寬度;index 為在colModel 中定義的列索引。

serializeGridData postData 通過此事件可以序列化傳遞給ajax請求的的資料。此事件将傳回一個以序列化的資料。若有自定義的資料(如JSON字元串、XML字元串)要發給伺服器時,可使用該事件。

3、方法

方法 參數 傳回值 描述
addJSONData data none

用傳遞的data(數組)填充網格。用法:假如我們從web伺服器獲得的資料(jsonresponse),則

var mygrid = jQuery(”#”+grid_id)[0];

var myjsongrid = eval(”(”+jsonresponse.responseText+”)”); 

mygrid.addJSONData(myjsongrid); 

myjsongrid = null; 

jsonresponse =null; 

将填充網格。當然,myjsongrid中的資料在傳遞到addJSONData之前可以被操作。

addRowData

rowid,

data, 

position, 

srcrowid

true on success, 

false otherwise

插入一新行,rowid 為新行的ID,data(數組)為新行資料,position為新行插入的位置(first為表頭,last為表尾,srcrowid指定偏移位置)。Data數組的格式為:{name1:value1,name2: value2…} ,name為colModel指定的名稱。
addXmlData data none

用傳入的data填充網格。用法:假如我們從web伺服器獲得資料

(xmlresponse),則 var mygrid = jQuery(”#”+grid_id)[0]; 

mygrid.addXmlData(xmlresponse.responseXML); 

将填充網格。當然,xmlresponse中的資料在傳遞到addXmlData之前可以被操作。

clearGridData clearfooter jqGrid object 清除網格中目前裝入的資料,如果clearfooter 參數為true,則清除網格最後一行資料。
delRowData rowid

true on success, 

false otherwise

删除id = rowid的行。但不會删除伺服器上的資料。
footerData

action,

data, 

format

jqGrid object

此方法獲得或設定網格底部資料。

action – 可設定為get(預設)或set。 Get從底部傳回name:value對象(name為colModel中的名稱)。此時其他兩個參數無效。 

Set将data數組(對象)設定到底部。Data為colName中的名稱和值對。

format – 預設為true,表示設定時使用formatter (如果colModel中已定義)。false表示不使用formatter

getCell

rowid, 

iCol

cell content 傳回id = rowid行,column = iCol列的内容。 iCol可以是列的索引或colName中定義的名稱。在編輯行或列時不能使用該方法,此時傳回的不是目前值,而是原始值。
getCol colname, returntype, mathoperation array[] or value

傳回列值數組。

colname 可以是列的索引值或colModel中的名稱。returntype 确定傳回數組的類型,為false(預設)時,數組隻包含值。為true時為對象數組,格式為{id:rowid, value:cellvalue},id為行的id, cellvalue為單元格的值。如 [{id:1,value:1},{id:2,value:2}…] 

mathoperation為可選參數,可以是sum、avg和count。若此參數進行了有效設定,則傳回計算後的值,若無效,則傳回空數組。

getDataIDs none array[] 傳回目前網格顯示資料的ID數組。無資料時傳回空數組。
getGridParam name mixed value 傳回請求的參數的值。name 是options 數組中的名稱,若為設定則options被傳回。
getInd

rowid,

rowcontent

mixed 當rowcontent 設定為false(預設)時,傳回id= rowid行的索引值。若rowcontent設定為true,則傳回整行。若為找到rowid則傳回false。
getLocalRow rowid row object Return the row data from the local array stored in data parameter when the datatype is local
getRowData rowid or none array{}

傳回id = rowid行的資料數組。格式為name:value對,name為colModel中的名稱,value為該行的值。未找到傳回空數組。在行或列編輯時此方法不可用,此時傳回的不是目前值,而是原始值。

若rowid為設定,則傳回網格中所有資料數組。

hideCol

colname

or

[colnames]

jqGrid object 根據colname或colnames數組給定的列名隐藏相應的列,列名必須是colModel中定義的名稱。表格的寬度不會改變。
remapColumns permutation, updateCells, keepHeader none 調整列的顯示順序。permutation指定調整後的順序,如 [1,0,2] 表示第一列在第二位顯示。若updateCells 設定為true,列資料将重新排序。若keepHeader 設定為true,header單元格将重新排序。
resetSelection none jqGrid object 選擇(反選)行。多選擇模式下同樣可用。
setCaption caption jqGrid object 設定新的表頭文字。若表頭為隐藏,将顯示。
setCell

rowid,

colname, 

data, 

class, 

properties, 

forceup

jqGrid object

修改單元格的值、類或樣式。其中:

rowid為行ID;colname為列名(可以是從0開始的列的索引值);

data 設定的内容,若為空,class若為字元串,将使用addClass為列加入一個類,若為數組,将直接加入CSS中;properties 設定單元格屬性。

setGridParam object jqGrid object

設定一個特定的參數。

有些參數需trigger(“reloadGrid”)才能生效。注意這個方法可以覆寫事件。名稱(name:value對)為選項數組中的名稱。 

setGridHeight new_height jqGrid object 動态設定網格高度。隻能對單元格的高度進行設定而不是網格。new_height 可以是像素、百分比或auto。
setGridWidth

new_width,

shrink

jqGrid object

動态設定網格寬度。new_width 為新寬度的像素值;

shrink(true或false)作用同shrinkToFit。若不設定,則使用shrinkToFit設定。

setLabel

colname, 

data, 

class, 

properties

jqGrid object

設定指定列标題文字、屬性和類:

colname 為列名,可以是從0開始的列索引;

data 為标題文字,為空則不修改;

class 若為字元串,則為類名,若為數組,則直接寫入CSS;

properties 為标題文字的屬性。

setRowData

rowid,

data, 

cssprop

true on success, 

false otherwise

更新rowid指定行的資料(使用數組)。

Data數組的格式為: {name1:value1,name2: value2…} 。name為colModel中描述的名稱,value為新值。cssprop若為字元串,将使用addClass為行添加類;若為數組對象,則直接加入CSS中。将data設定為false的情況下,可設定屬性和類名

setSelection

rowid,

onselectrow

jqGrid object 選擇或反選id = rowid指定的行。若onselectrow設定為true (預設) 則觸發onSelectRow事件,否則不觸發。
showCol colname jqGrid object 顯示colname 指定的列。若colname為字元串,隻顯示指定的列,若colname為數組 [“name1”,”name2”] 則顯示name1和name2列, name必須是colModel中的名稱。寬度不變。
trigger(“reloadGrid”) none none 按目前設定重新加載網格。若datatype為xml或json,将從伺服器重新請求資料。此方法适用于一個已建立的網格。注意不會改變表頭,也就是說改變colModel将沒有作用。你可用gridUnload,使用新colModel來重新加載。
updateColumns none none

在拖拽表格時,同步網格寬度。用法:

var mygrid=jQuery(”#grid_id”)[0];

mygrid.updateColumns();

四、問題記錄

1、IE9下jQgrid一直出現水準滾動條的問題。

解決:是因為jqGrid會在IE下出現border與padding造成寬度過大引起的,增加此屬性可解決:

cellLayout:0
           

此時當頁面縮放擺100%時,已經不顯示滾動條,但是縮放比例不為100%時,依然會顯示水準滾動條,終極解決方案為更改ui.jqgrid.css樣式:

.ui-jqgrid .ui-jqgrid-bdiv{ overflow-x: hidden; }
           

如果還是不行,還有一個方法:

$(grid_selector).closest(".ui-jqgrid-bdiv").css({ 'overflow-x': 'hidden' });
           

當然你也可以直接修改樣式.ui-jqgrid-bdiv增加overflow-x:hidden;

2、自定義操作列。

jqGrid預設的自定義編輯列,隻能設定編輯按鈕與删除按鈕。并且圖示基本上都很難控制,如果想自己實作自己的自定義編輯列,可以如下操作:

在actions列的formatoptions項,增加此行:

name: 'myac', index: '', width: 80, fixed: true, sortable: false, resize: false,
     formatter: 'actions',
     formatoptions: {
     keys: true,
     delbutton:false,
     delOptions: { recreateForm: true, beforeShowForm: beforeDeleteCallback },
     formatter:"actionFormatter"
   },
           

然後在頁面開始處增加如下代碼:

$.extend($.fn.fmatter, {
 actionFormatter: function(cellvalue, options, rowObject) {
  var retVal = "顯示在原來編輯按鈕的按個地方的代碼";
  return retVal;
 }
} );
           

一些常用方法的案例

jqGrid有很多方法函數,用來操作資料或者操作Grid表格本身。jqGrid的方法有兩種調用方式:

          $(“#grid_id”).jqGridMethod( parameter1,…,parameterN );

或者

        $(“#grid_id”).jqGrid(‘method’, parameter1,…,parameterN );

        首先介紹一下Jqgrid的幾個最常用的方法函數,具體的方法API也可以參考文檔(http://www.trirand.com/jqgridwiki/doku.php?id=wiki:methods) 。

1. getGridParam

        這個方法用來獲得jqGrid的選項值。它具有一個可選參數name,name即代表着jqGrid的選項名,如果不傳入name參數,則會傳回 Jqgrid整個選項options。例如:

var id = $("#gridTable").jqGrid("getGridParam", "selrow");      //獲得選中行的ID
var sort = $("#gridTable").jqGrid("getGridParam", "sortname");  //獲得排序的字段
var page = $("#gridTable").jqGrid("getGridParam", "page");      //獲得目前的頁數
var row = $("#gridTable").jqGrid("getGridParam", "rowNum");     //獲得目前頁的行數
var count = $("#gridTable").jqGrid("getGridParam", "records");  //獲得總記錄數
var rows = $("#gridTable").jqGrid("getGridParam", "selarrrow"); //可以多選時,傳回選中行的ID
           

  

2. getRowData

這個方法用來獲得某行的資料。它具有一個rowid參數,Jqgrid會根據這個rowid傳回對應行的資料,傳回的是name:value類型的數組。如果rowid未能被找到,則傳回一個空數組;如果未設定rowid參數,則以數組的形式傳回Grid的所有行資料。例如:

var getRowdata = function() {
    var selectedId = $("#gridTable").jqGrid("getGridParam", "selrow");
    var rowData = $("#gridTable").jqGrid("getRowData", selectedId);
           

3. addRowData

        這個方法用于向Grid中插入新的一行。執行成功傳回true,否則傳回false。它具有4個參數:

  • rowid:新行的id号;
  • data:新行的資料對象,形式為{name1:value1,name2: value2…},其中name為colModel中定義的列名稱name;
  • position:插入的位置(first:表格頂端;last:表格底端;before:srcrowid之前;after:srcrowid之後);
  • srcrowid:新行将插入到srcrowid指定行的前面或後面。

        這個方法可以一次性插入多行,data參數必須是[{name1:value1,name2: value2…}, {name1:value1,name2: value2…}]這樣的數組形式。例如:

var addStudent= function() {
var selectedId = $("#gridTable").jqGrid("getGridParam", "selrow");
var dataRow = {
id : 99,
lastName : "Zhang",
firstName : "San",
email : "<a href="mailto:[email protected]" target="_blank" rel="external nofollow" >[email protected]</a>",
telNo : "0086-12345678"
};
if (selectedId) {
$("#gridTable").jqGrid("addRowData", 99, dataRow, "before", selectedId);
} else {
$("#gridTable").jqGrid("addRowData", 99, dataRow, "first");
}
};
           

  

         4. setRowData                  這個方法用于為某行資料設定資料值。執行成功傳回true,否則傳回false。它具有3個參數:

  • rowid:更新資料的行id;
  • data:更新的資料對象,形式為{name1:value1,name2: value2…},其中name為colModel中定義的列名稱name;這個資料對象,不必設定完全,需要更新哪列,就設定哪列的name:value對;
  • cssprop:如果cssprop為String類型,則會使用jQuery的addClass為行增加相應名稱的CSS類;如果為object類型,則會使用html的css屬性,為行添加樣式。如果隻想增加css樣式而不更新資料,可以将data參數設為false。

例如:

var updateStudent = function() {
var selectedId = $("#gridTable").jqGrid("getGridParam", "selrow");
var dataRow = {
lastName : "Li",
firstName : "Si",
email : "<a href="mailto:[email protected]" target="_blank" rel="external nofollow" >[email protected]</a>"
};
var cssprop = {
color : "#FF0000"
};
$("#gridTable").jqGrid('setRowData', selectedId, dataRow, cssprop);
};
           

  

5. delRowData

        這個方法用于删除某行資料。執行成功傳回true,否則傳回false。具有一個參數rowid,代表要删除的行id。例如:

var deleteStudent = function() {
var selectedId = $("#gridTable").jqGrid("getGridParam", "selrow");
$("#gridTable").jqGrid('delRowData', selectedId);
};
           

6. trigger(“reloadGrid”)

        根據目前設定,重新載入Grid表格,即意味着向服務端重新發送一個新的請求。此方法隻能用于已經建構好的Grid。此外,此方法不會使對colModel所做出的改變生效。應該使用gridUnload來重新載入對colModel的新設定。例如:

$("#gridTable").jqGrid("setGridParam", {
datatype : "json",
search : true,
mtype : "post"
}).trigger("reloadGrid");
           

轉載于:https://www.cnblogs.com/jiangxifanzhouyudu/p/7411308.html

繼續閱讀