星期二, 5月 25, 2010

jqgrid - search

我怎麼照官網做 都沒有search的結果
看官網的php 也不像會有search的結果...

最後還是上網找

server.php (同官網範例,就在下sql那段 加入這個)
$where = "WHERE 1=1 " . constructWhere();
$SQL = "SELECT ... FROM xxx $where ORDER BY $sidx $sord LIMIT $start , $limit";
...

//--------------------------
function constructWhere(){
  $wh = "";
  $searchOn = $_REQUEST['_search'];
  if($searchOn=='true')
  {
   $fld = $_REQUEST['searchField'];

   //過濾欄位,填入會用到search的欄位
   if(!( $fld=='id' || $fld =='name'))
   {
    $fldata = $_REQUEST['searchString'];
    $foper = $_REQUEST['searchOper'];

    //construct where
    $wh .= " AND " . $fld;
    switch ($foper) {
      case "bw":
        $fldata .= "%";
        $wh .= " LIKE '" . $fldata."'";
        break;
      case "eq":
        if(is_numeric($fldata)) {
          $wh .= " = " . $fldata;
        }else{
          $wh .= " = '" . $fldata."'";
        }
        break;
      case "ne":
        if(is_numeric($fldata)) {
          $wh .= " <> " . $fldata;
        }else{
          $wh .= " <> '" . $fldata . "'";
        }
        break;
      case "lt":
        if(is_numeric($fldata)) {
          $wh .= " < " . $fldata;
        } else {
          $wh .= " < '" . $fldata."'";
        }  
        break;
      case "le":
        if(is_numeric($fldata)) {
          $wh .= " <= " . $fldata;
        }else {
          $wh .= " <= '" . $fldata."'"; 
        }
        break;
      case "gt":
        if(is_numeric($fldata)) {
          $wh .= " > ".$fldata;
        } else {
          $wh .= " > '".$fldata."'";
        }
        break;
      case "ge":
        if(is_numeric($fldata)) {
          $wh .= " >= ".$fldata;
        } else {
          $wh .= " >= '".$fldata."'";
        }
        break;
      case "ew":
        $wh .= " LIKE '%".$fldata."'";
        break;
      case "ew":
        $wh .= " LIKE '%".$fldata."%'";
        break;
      default :
        $wh = "";
    }
  }
  return $wh;
}

Reference
忘了哪看的了...

接收完成的callback function
jQuery("#tbSearch").jqGrid({
  datatype:function(postdata) {
  jQuery.ajax({
  url: "server.php", //原本寫在外面的,現在外面那個就參考用
  data:postdata,
  datatype:"json",
  complete:function(xmldata,stat){
   if(stat=="success") {
    //xmldata是XMLHttpRequest, 所以如果是datatype的話,就要 xmldata.responseXML
    alert(xmldata.responseText);
   }
  }
});
},
...

Reference
Data Manipulation
jqGrid 的多字段查詢

7 則留言:

匿名 提到...

Hi, 您好
我最近也在研究jqGrid,我在用editing form時發現輸入框和標題都不對齊,在網路上的範例每一個輸入欄位都有線區隔開來,但我的卻沒有,我用的是3.8.1版本的,不知您有沒有這個問題。

fishjerky 提到...

不知道你說的沒對齊是如何
http://www.trirand.com/jqgridwiki/doku.php?id=wiki:form_editing
鏈結上是form editing的圖片,輸入框和標題都有對齊,中文的話我也沒看到有沒對齊的狀況,線... 倒是沒看到
我是用v3.6.5,真快 已經到v3.8.1了

布萊恩 提到...

感謝您的回覆,依您提供的鏈結的圖來說,我說的沒對齊是指Data和它的textbox離得很遠且看起來像是有換列,wiki的圖就很整齊,且Data、Amount、Tax、Total和Notes這幾列都有用線區隔開來,但我用3.8.1的就沒有這些線,我查過formoption好像也沒有設定的參數,我在想會不會是3.8.1本身API就有問題,您說您是用3.6.5的,不曉得您方不方便把3.6.5在程式中會引用到的css和js和java script的code貼給我,感激不盡!!

布萊恩 提到...

哈~我改用了3.6.5,問題就解決了,果然是3.8.1的問題,不管如何~感謝你的回覆哦^^

fishjerky 提到...

有解決就好
我還正準備用v3.8.1做一個form editing試試

布萊恩 提到...

我現在又遇到一個問題@@,我把EditUrl設到我的edit.aspx,但我只接得到oper和rowid的參數,其它的參數我都request不到,不知是哪裡出了問題,可否請教你在editurl的那隻程式是如何接參數的,接不到和設定jqGrid有關係嗎?

fishjerky 提到...

用post接在jqgrid設的欄位
ex.
/* jqgrid */
...
[{name:'name',editable: true}],
editurl: 'edit.php',
...

/* php */
$_POST['name'];