2012-02-13 7 views
0

ユーザーがクリックした行のフィールドの値が必要です。私はこのコードを書くが、このコードは間違っている。jqGridでインデックス行をクリック

var firstButtonColumnIndex = 0; 
    grid = $('#list'), firstButtonColumnIndex, buttonNames = {}; 

grid.jqGrid({ 
    url: 'jQGridHandler.ashx', 
    datatype: 'local', 
    direction: "rtl", 
    datatype: 'json', 
    height: 250, 
    colNames: ['', ''], 
    colModel: [ 
     { name: 'WorkOrderNo', width: 100, sortable: true }, 
     { name: 'AssetNo', width: 150, sortable: true }, 
     { name: 'WorkDescription', width: 400, sortable: true }, 
     { name: 'WorkOrderDate', width: 100, sortable: true }, 
     { name: 'WorkOrderTime', width: 100, sortable: true }, 
     { name: 'Remark', width: 260, sortable: true }, 
     { name: 'del', width: 20, sortable: false, search: false, 
      formatter: function() { 
       return "<span class='ui-icon ui-icon-trash'></span>" 
      } 
     }, 
     { name: 'details', width: 20, sortable: false, search: false, 
      formatter: function() { 
       return "<span class='ui-icon ui-icon-document'></span>" 
      } 
     } 
    ], 
    gridview: true, 
    rowNum: 10, 
    rowList: [10, 20, 30], 
    pager: '#pager', 
    // sortname: 'WorkOrderNo', 
    viewrecords: true, 
    sortorder: 'asc', 
    rownumbers: true, 
    beforeSelectRow: function (rowid, e) { 
     var iCol = $.jgrid.getCellIndex(e.target); 
     if (iCol >= 7) { 
      alert("rowid=" + rowid + "\nButton name: " + buttonNames[iCol]); 
     } 
     // prevent row selection if one click on the button 
     return (iCol >= firstButtonColumnIndex) ? false : true; 
    } 
}); 

buttonNames[7] = 'Remove'; 
buttonNames[8] = 'Details'; 
grid.jqGrid('navGrid', '#pager', { add: false, edit: false, del: false }, {}, {}, 
    {}, { multipleSearch: true, overlay: false, width: 460 }); 

しかしbeforeSelectRowイベントrowidで常に0私は、行をクリックWorkOrderNoを返したいです。

plese help me。 ありがとうございました

答えて

1

まず、投稿したコードには多くの小さな間違いが含まれています。だからうまくいかない。 stackoverflow上の転記の元のコードを変更する場合は、変更をより慎重に行ってください。例えば

  • colNamesは2つだけの要素が、colModel含ま - 8要素。だから、配列の長さが違うということでエラーが返ってくるので、コードはうまく動作しません。
  • 'local'の値を持つものと'json'の値を持つものの2つを指定して、datatypeオプションを2回定義します。
  • firstButtonColumnIndex = 0の最後にセミコロン( ';')の代わりにカンマ( '、')を使用する必要があります(最初の行を参照)。現在のコードは定義されていないgridを使用し、それをグローバル変数と解釈します。あなたの主な質問へ

あなたはあなたの質問のタイトルとして「jqGridでゲットインデックス行のClicked」を使用していますが、常にrowid 0を持っていることをあなたの質問のテキストで書きましたそして、rowIndexではありません。 rowIndex次へbeforeSelectRowのコードを変更することができます取得するには:

beforeSelectRow: function (rowid, e) { 
    var iCol = $.jgrid.getCellIndex(e.target); 
    if (iCol >= 7) { 
     alert("rowid=" + rowid + 
       "\nrowIndex=" + $(e.target).closest("tr.jqgrow")[0].rowIndex + 
       "\nButton name: " + buttonNames[iCol]); 
    } 
    // prevent row selection if one click on the button 
    return (iCol >= firstButtonColumnIndex) ? false : true; 
} 

をあなたは常にrowid 0とを持っているという情報は、'jQGridHandler.ashx'下サーバーのコードを生成JSONで間違ったidを埋めるという仮定に従います。 idユニークの値をページ上に持つ必要があります。開発ツールを使用して、行のid属性(グリッドの<tr>のID)を確認するか、FiddlerFirebugを使用して、サーバーから返されるJSONをキャッチします。エラーのローカライズに問題がある場合は、JSONデータに質問を追加する必要があります。

+0

助けてくれてありがとうございますが、このJqgrid検索では仕事がありません。私はなぜpleseが私を助けているのかわかりません。ありがとう – Pouya

+0

@mohsen:ようこそ!あなたの既存の問題については、より正確に問題を指定する必要があります。 'datatype: 'json''を使用すると、サーバー*はデータのフィルタリング(検索)を行います。サーバは 'filters'パラメータを受け取ります(このフォーマットについては、[here](http://www.trirand.com/jqgridwiki/doku.php?id=wiki:advanced_searching#options)を参照してください)。したがって、サーバは 'filters'パラメータを分析して検索を実装する必要があります。 – Oleg

+0

:申し訳ありませんが、サーバー側、またはClientSideで検索しますか?私はチェコを全部持っていて、すべてが正しかった。私は解決する方法を知らない。 – Pouya

関連する問題