欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

jQuery學習筆記--jqGrid的使用方法(編輯,刪除,

系統 2286 0

早上無意中發現,jqGrid發布了3.6.2版本。查看了一下chang log,居然讓我看到了中文包的發布。

前幾天正為這事兒頭痛,要不要根據grid.local-en.js來漢化一下,沒想到居然直接就出中文包了。官方的一般來說比自己做的要好吧。

下載地址: http://www.trirand.com/blog/?page_id=6

下載之后修改自己寫的jsp文件中的引用語句

<script src="../js/i18n/grid.locale-en.js" type="text/javascript"></script>

修改為

<script src="../js/i18n/grid.locale-cn.js" type="text/javascript"></script>

再打開運行tomcat來看,果然變成中文的了。哈哈!爽!

不過有一點需要注意,如果你是狂熱愛好者,在jsp中直接引用src目錄下的原始包(這樣可以調試jqGrid的源代碼),那么除了上面我們說的jsp文件中需要修改之外,還有一個js文件需要修改,那就是:src/grid.loader.js中

    
          var modules = [
        { include: true, incfile:'i18n/grid.locale-en.js'}, // jqGrid translation

    
  

需要修改為

    
          var modules = [
        { include: true, incfile:'i18n/grid.locale-cn.js'}, // jqGrid translation

    
  

這樣就好了!

使用jqGrid修改數據

jqGrid可以有三種方式,讓我們來修改顯示在jqGrid中的數據。這三種方式分別是:
Cell Editing——只允許修改某一個單元格內容.(所有圖片均來自jqGrid的wiki或者jqGrid的Demo截圖)

jQuery學習筆記--jqGrid的使用方法(編輯,刪除,更新,新增)
Inline Editing——允許在jqGrid中直接修改某一行的數據

jQuery學習筆記--jqGrid的使用方法(編輯,刪除,更新,新增)
Form Editing——彈出一個新的編輯窗口進行編輯和新增

jQuery學習筆記--jqGrid的使用方法(編輯,刪除,更新,新增)
暫時先不管這三種方式,我們來看看如何讓一個jqGrid的數據能夠進行編輯呢?
其實很簡單,就是在jqGrid的colModel屬性中,設置幾個屬性:
editable
可選值是true或者false,默認是false。用來說明這個列的數據是否可編輯。特別要注意的是,jqGrid的隱藏字段就算設置了這個屬性為true,一樣不能被編輯。在Cell Editing以及Inline Editing模式下,只能通過把這些字段設置為可見來修改。在Form Editing模式下,可以通過editoptions參數來設置是否可以修改隱藏列。
edittype
可選的值是'text', 'textarea', 'select', 'checkbox', 'password', 'button', 'image', 'file'以及'custom'。默認值是text。
根據名字就可以看出來,這個屬性是設置編輯框的HTML樣式的。比如,設置為text值,并且可以在editoptions中設置size以及maxlength等屬性。這樣生成的HTML樣式有點類似<input type="text" size="10" maxlength="15"/>這樣。
其中有幾個要注意:
設置checkbox的時候,需要在editoptions中指定value值,第一個值應該是checked的時候的值。比如editoptions:{value:"Yes:No"}會設定這個checkbox編輯框,選中的時候,值是Yes,沒選中的時候值是No。建議最好都設定一下這個值。
設置select的時候,editoptions中需要設定select下拉框的值。
一種方式是用字符串設置editoptions的value屬性,像這樣editoption: { value: “FE:FedEx; IN:InTime; TN:TNT” },這就為下拉框設置了三個可選值。注意,冒號前面的代表的是值,冒號后面代表的是顯示值。
第二種方式是用對象來設置editoptions的value屬性,這個時候,value值要用{}包括起來,像這樣: editoptions:{value:{1:'One',2:'Two'}}。
第三種方式,是為editoptions設置dataUrl參數。意思就是select的值,是通過一個URL來獲取的,比如一個Ajax請求的返回值。特別需要注意的是,在這種情況下,URL的返回值必須是包括select以及option這些HTML標簽的。就像這樣:<select><option value="1">One</option><option value="2">Two</option></select>.這種情況下,還可以在editoptions中設置是否允許多選,size等等。
設置image的時候,editoptions的src屬性用來指定圖片的地址。
custom類型就是通過一個函數來指定需要編輯的元素,并返回需要提交的值。
函數的定義在editoptions中說明,分別是custom_element用來指定哪一個函數用來創建編輯框,注意這里函數必須返回一個新的DOM元素,函數的參數一個是值Value,另外一個是colModel的editoptions值。
另外一個是custom_value,這個函數用來在編輯完成之后返回本編輯框的值,這個函數的參數是元素對象。大概的調用格式如下:
<script>
//創建一個input輸入框
function myelem (value, options) {
var el = document.createElement("input");
el.type="text";
el.value = value;
return el;
}

//獲取值
function myvalue(elem) {
return $(elem).val();
}
jQuery("#grid_id").jqGrid({
...
colModel: [
...
{name:'price', ..., editable:true, edittype:'custom', editoptions:{custom_element: myelem, custom_value:myvalue} },
...
]
...
});
</script>

editoptions
除了上面介紹的editoptions選項外,我們還可以設置defaultValue等等,更復雜的東西,比如dataEvents就不介紹了。
editrules
editrules是用來設置一些可用于可編輯列的colModel的額外屬性的。大多數的時候是用來在提交到服務器之前驗證用戶的輸入合法性的。比如editrules:{edithidden:true, required:true....}。
可選的屬性包括:
edithidden:只在Form Editing模式下有效,設置為true,就可以讓隱藏字段也可以修改。
required:設置編輯的時候是否可以為空(是否是必須的)。
number:設置為true,如果輸入值不是數字或者為空,則會報錯。
integer:
minValue:
maxValue:
email:
url:檢查是不是合法的URL地址。
date:
time:
custom:設置為true,則會通過一個自定義的js函數來驗證。函數定義在custom_func中。
custom_func:傳遞給函數的值一個是需要驗證value,另一個是定義在colModel中的name屬性值。函數必須返回一個數組,一個是驗證的結果,true或者false,另外一個是驗證錯誤時候的提示字符串。形如[false,”Please enter valid value”]這樣。
自定義驗證的例子:
<script>
function mypricecheck(value, colname) {
if (value < 0 && value >20)
return [false,"Please enter value between 0 and 20"];
else
return [true,""];
}

jQuery("#grid_id").jqGrid({
...
colModel: [
...
{name:'price', ..., editrules:{custom:true, custom_func:mypricecheck....}, editable:true },
...
]
...
});
</script> < function mypricecheck(value, colname) { if (value < 0 && value >20) return [false,"Please enter value between 0 and 20"]; else return [true,""]; } jQuery("#grid_id").jqGrid({ ... colModel: [ ... {name:'price', ..., editrules:{custom:true, custom_func:mypricecheck....}, editable:true }, ... ] ... }); // >

formoptions (只在Form Editing方式下有效),他的主要作用是用來重新排序Form中的編輯元素,同時可以在編輯元素前或者編輯元素后增加一些信息(比如,一些提示信息,或者一個紅色的*表示必須要填寫等等)。
可選的屬性如下:
elmprefix:字符串值,如果設置了,則會在編輯框之后出現一些內容(可能是HTML的內容)
elmsuffix:字符串值,如果設置了,則會在編輯框之前出現一些內容(可能是HTML的內容)
label:字符串值,如果設置了,則這個值會替換掉colNames中的值出現作為該編輯框的標簽顯示
rowpos:數字值,決定元素行在Form中的位置(相對于文本標簽again with the text-label)
colpos:數字值,決定元素列在Form中的位置(相對于標簽again with the label)
兩個編輯框可以有相同的rowpos值,但是colpos值不同,這會把這兩個編輯框放到Form的同一行中。
特別注意:如果設置了rowpos以及colpos的值,強烈推薦為所有的其他編輯元素都設置這些值。

----本文只是doc文檔的解釋,沒有太多自己的東西。接下來我會做一個Form Editing的例子,肉戲即將登場......

我們講了一下jqGrid編輯的基礎知識。下面我們基于Form Editing的編輯模式詳細舉例講解一下。

Form Editing編輯模式主要的方法有幾個,分別是editGridRow——用來修改記錄,editGridRow函數,傳遞一個'new'的參數就表示新增記錄;viewGridRow查看記錄詳情;delGridRow刪除記錄。

這幾個方法的調用方式,和jqGrid的其它函數調用方式一樣。(可以采用new API的調用方式,把函數名稱作為第一個參數來調用)需要注意的地方是,各個函數調用內容的options參數有一些差異,具體可以參考文檔;另外就是,各個函數提交到服務端的數據和格式有所差異。這里以editGridRow為例來說明一下。

editGridRow的調用方式如下:

    
      jQuery("#grid_id").editGridRow( rowid, properties );
或者是如下的方式
jQuery("#grid_id").jqGrid('editGridRow', rowid, properties );
    
  

其中rowid指定是編輯那一行,properties是一個包含各種屬性以及事件的數組。(具體的屬性和事件,請參考文檔,這里就不翻譯了。)調用之后,提交到服務器上去的數據都是一些什么數據呢?

提交的數據主要包括:

1.各個編輯"字段:值"的對。這個不好理解,其實的意思就是,相當于用POST的方式提交一些數據,數據的名稱就是我們定義在colModel中的name屬性,值就是我們在彈出窗口錄入的值。(當然,這就要求我們在Server端的Action定義這些變量并封裝到Pojo對象中去進行處理。)

2.包含一個"id:rowid"的值,用來表明是哪一個id關鍵字的記錄被修改(新增記錄的時候,id=_empty);

3.包含一個"oper:edit"的值,用來指示是編輯還是新增記錄(新增記錄的時候,oper=add)

4.其它高級情況,比如使用了editData對象或者實現了onclickSubmit事件之后的處理。比較復雜,暫時沒有詳細研究這種情況下提交數據的格式。

如果是要新增記錄,那么editGridRow的調用方式如下:

    
      jQuery("#grid_id").editGridRow( "new", properties );
    
  

好了,接下來我們來看看我們在jsp文件中是如何實現的吧。

首先說明一下,這個例子和前一篇文章中的例子有很多變化。主要包括,在jqGrid中新增了一個列,用來作為操作列,同時增加了兩個操作:編輯和刪除。增加了一個導出查詢結果為csv的按鈕(自定義按鈕),但是具體的后臺服務器功能沒有實現;把查詢和新增功能單獨作為一個按鈕顯示在jqGrid的后面。具體的差異,大家可以看看本人另外一篇文章《 jqGrid的多字段查詢 》中的例子。

$().ready(function(){
$("#grid").jqGrid({
url:'queryAllBrand.action' ,
datatype: "json",
mtype: 'POST',
colNames:['操作','品牌ID','品牌代碼', '品牌名稱', '是否可用','最后修改時間'],
colModel:[
{name:'act',index:'act',width:110,search:false,sortable:false,editable:false},
{name:'brandId',index:'brandId', width:90,editable:false},
{name:'code',index:'code', width:110,
editable:true,
edittype:'text',
editoptions:{size:10,maxlength:15},
editrules:{required:true},
formoptions:{elmprefix:'(*)'}
},
{name:'brandName',index:'brandName', width:100,
editable:true,
edittype:'text',
editoptions:{size:10,maxlength:15},
editrules:{required:true},
formoptions:{elmprefix:'(*)'}
},
{name:'status',index:'status', width:80,
editable:true,
edittype:'checkbox',
editoptions:{value:"1:0"},
editrules:{required:true},
formoptions:{elmprefix:'(*)'}
},
{name:'lastModifiedDatetime',index:'lastModifiedDatetime', width:100,editable:false}
],
rowNum:3

在實際的修改、新增保存中,會看到如下的錯誤提示:error Status:"OK".Error code: 900。實際上,修改(新增)的記錄已經正確的保存到數據庫中了。見下圖:

jQuery學習筆記--jqGrid的使用方法(編輯,刪除,更新,新增)

這是為什么呢?一直為這個問題頭痛苦惱了好幾天。仔細閱讀了jqGrid wiki上的文檔,也google了許多的文章,仍然找不到相應的說明或者解決辦法。

后來研究了一下jqGrid的源代碼。src/grid.formedit.js文件,發現其中有一個函數postIt,其中有如下的代碼:

    
      if(Status != "success") {
    ret[0] = false;
    if ($.isFunction(rp_ge.errorTextFormat)) {
        ret[1] = rp_ge.errorTextFormat(data);
    } else {
        ret[1] = Status + " Status: '" + data.statusText + "'. Error code: " + data.status;
    }
} else {
    // data is posted successful
    // execute aftersubmit with the returned data from server
    if( $.isFunction(rp_ge.afterSubmit) ) {
        ret = rp_ge.afterSubmit(data,postdata);
    }
}
    
  

看來問題是在這個地方。由此猜想jqGrid的增刪改操作是要求服務器返回內容的。

我猜測,jqGrid要求服務器返回包含成功與否的status內容。所以我修改了一下Action的類方法的返回值:如下:

    
      public String modifyBrand()
{
    String result = "success";
    try
    {
        
        MProductBrand mpb = new MProductBrand();
        mpb.setBrandName(brandName);
        mpb.setCode(code);
        mpb.setStatus(status);
        mpb.setLastModifiedDatetime(new Timestamp(System.currentTimeMillis()));
        
        if(oper != null && oper.equals("edit")){  //編輯
            mpb.setBrandId(new Integer(id));
            this.brandService.modifyBrand(mpb);
        }
        else if (oper != null && oper.equals("add")){  //新增
            MProductBrand mproductbrand1 = this.brandService.locateByBrandcode(mpb
                    .getCode().toString().trim().toUpperCase());
            MProductBrand mproductbrand2 = this.brandService.locateByBrandName(mpb
                    .getBrandName().toString().trim());
            
            if (mproductbrand1.getBrandId() == null && mproductbrand2.getBrandId() == null)  //檢查是否存在
            {
            
                this.brandService.addBrand(mpb);
            }
            else
            {
                log.warn("品牌代碼或品牌名稱已經存在");
                result = "error";
            }
        }
    }
    catch (Exception ex)
    {
        ex.printStackTrace();
        log.warn("修改失敗");
        result = "error";
    }
    
    HttpServletResponse response = ServletActionContext.getResponse();
    response.setContentType("text/json; charset=UTF-8");
    try{
        PrintWriter out = response.getWriter();
        JSONObject json = new JSONObject();
        json.put("status", result);
        out.print(json.toString());
    }
    catch(Exception e){
        e.printStackTrace();
        log.error("Error:Cannot create PrintWriter Object !");
    }
    return null;
}
    
  

再次執行,發現保存成功之后,編輯窗口自動關閉,頁面自動重新加載。很好!

不過我一直在疑惑,到底服務器要怎么返回呢???仔細看了看jqGrid的Demo,想通過研究php文件來看看例子中是如何做的,也沒有找到。并且,jqGrid Demo的編輯例子,是不實際向服務器提交修改內容的。說是為了安全原因......

jQuery學習筆記--jqGrid的使用方法(編輯,刪除,更新,新增)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲国产日韩在线一区 | 日本粉嫩一区二区三区视频 | 欧美老妇交乱视频 | 亚洲综合色丁香婷婷六月图片 | 夜夜爱夜夜操 | 精品国产乱码久久久久久88av | 色综合欧美 | 欧美亚洲国产第一页草草 | 一区二区三区在线看 | 国产一级成人毛片 | 91激情视频 | 久久理论 | 电影长安道无删减免费看 | 亚洲午夜精品视频 | 91蝌蚪九色 | 亚欧在线一线 | 欧美久久xxxxxx影院 | 成人福利视频网 | 色婷婷久久免费网站 | 玖玖啪| 91文字幕巨乱亚洲香蕉 | 奇米影视小说 | 久久国产欧美日韩精品 | 国产一区二区在线免费观看 | 日本免费在线一区 | 青草在线观看 | 九九热线精品视频6一 | 第一福利在线观看 | 毛片免费在线 | 久草免费在线 | 双凤奇案| 久久88香港三级 | 色婷婷精品综合久久狠狠 | 欧美一区二区三区四区视频 | 一级黄色免费毛片 | 久久99精品久久久久久琪琪 | 麻豆视频在线播放 | 久久亚洲一级毛片 | 毛片a在线| 亚洲艳情网站 | 国产精品a在线观看香蕉 |