0

外部フィルターを使用して jqgrid データをフィルター処理したいと考えています。私の場合、組み込みのフィルターまたは検索ボックスを使用するのは少し奇妙です。入力を受け取り、それに応じてjgridデータをフィルタリングするフォームを持つアプリケーションがあります。フィルタリングされたデータを正常に提供するコードを実装しましたが、jqgrid にはありません。jqgrid を定義するときに URL を指定します。ここには、フィルター フォームを送信するための別の URL があります。ここで、データをフィルタリングするための URL と、jqgrid でデータを表示するための URL が異なります。では、フィルタリングされたデータをjqgridに表示するにはどうすればよいですか。私はJava Hibernateでコーディングしています。

これは私のフィルター ダイアログ ボックスのコードです: {

              <form name="t_filter_form" id="t_filter_form">

              <table cellspacing="15">
                  <tr>
                <td width="50%"><label><input type="radio" value="Current_Month" id="t_filter_current_Month" checked="checked" name="filter_type" />Current Month</label></td>
            </tr>
    <tr>
                <td width="50%"><label><input type="radio" value="Yearly" id="t_filter_yearly"  name="filter_type" />Yearly</label></td>
                </tr>
            <tr>
                <td align="right"><label>Enter Year:</label></td>
                <td><input type="text" name="year" id="t_filter_year"/></td>
            </tr>
            <tr>
               <td width="50%"><label><input type="radio" value="Monthly" id="t_filter_monthly" name="filter_type" />Monthly</label></td>
               </tr>
        <tr>
            <td align="right" ><label>Select Month:</label></td> 
            <td><select name="month" id="month">             
                        <option value="1">January</option>
                        <option value="2">February</option>
                        <option value="3">March</option>
                        <option value="4">April</option>
                        <option value="5">May</option>
                        <option value="6">June</option>
                        <option value="7">July</option>
                        <option value="8">August</option>
                        <option value="9">September</option>
                        <option value="10">October</option>
                        <option value="11">November</option>
                        <option value="12">December</option>
                    </select></td>
            </tr>
        <tr>
            <td width="50%"><label><input type="radio" value="Range" id="t_filter_range" name="filter_type" />Range</label></td>
        </tr>
        <tr><td align="right">
            <label for="from">From</label></td>
            <td><input type="text" id="from" name="from"/></td>
        </tr>
        <tr>
            <td align="right"><label for="to">To</label></td>
            <td><input type="text" id="to" name="to"/></td>
        </tr>
            <tr>
                <td width="50%"><label><input type="radio" value="category" id="t_filter_category" name="filter_type"  />Category</label></td> 
            </tr>
                  <tr>
            <td align="right" ><label>Enter Category:</label></td><td><input type="text" name="t_filter_category" id="t_filter_category_txt"/></td>
            </tr>
                  <tr><td>&nbsp;</td>
                      <td><input type="button" name="filter_transaction" id="filter_transaction" value="Filter transaction" onclick="filter();" />
                        <input type="button" onclick="return close_dialog();" id="cancel_filter" value="Cancel" /></td>
                    </tr>
            </table> </form>

          </div>

ユーザーが「Filter Transaction」ボタンをクリックすると、グリッドがリロードされます。ここで、ユーザーがグリッドを毎月フィルタリングすることを選択した場合、月が入力として使用され、それに応じてグリッドがリロードされます

これは私のサーブレットコードです:

if(request.getParameter("action").equals("filter")){
           if(login!=null)
            {
                String query=null;
                if("Current_Month".equals(request.getParameter("filter_type")))
                {
                    System.out.println("Current month");
                    int month=cal.get(Calendar.MONTH)+1;
                    int year=cal.get(Calendar.YEAR);
                    System.out.println("Current month is: " +month);
                    query = "from TransactionDetails where  register_id="+hb_id+" and transaction_date>='"+year+"-"+month+"-1' and transaction_date<='"+year+"-"+month+"-31'" ;
                    System.out.println("Current month query is: " +query);

                }
                if("Yearly".equals(request.getParameter("filter_type")))
                {
                    System.out.println("Yearly");
                    int year=Integer.parseInt(request.getParameter("year"));
                    System.out.println("Entered year is: " +year);
                    query = "from TransactionDetails where  register_id="+hb_id+" and transaction_date>='"+year+"-1-1' and transaction_date<='"+year+"-12-31'" ;
                    System.out.println("Yearly query is: " +query);

                }
                if("Monthly".equals(request.getParameter("filter_type")))
                {
                    System.out.println("Monthly");
                    int month=Integer.parseInt(request.getParameter("month"));
                    System.out.println("Entered month is: " +month);
                    int year=cal.get(Calendar.YEAR);
                    query = "from TransactionDetails where  register_id="+hb_id+" and transaction_date>='"+year+"-"+month+"-1' and transaction_date<='"+year+"-"+month+"-31'" ;
                    System.out.println("Current month query is: " +query);
                }
                if("Range".equals(request.getParameter("filter_type")))
                {
                    System.out.println("Range");
                    String from_date=request.getParameter("from");
                    String[] date = from_date.split("/");
                    from_date = date[2]+"-"+date[1]+"-"+date[0];
                    String to_date=request.getParameter("to");
                    date = to_date.split("/");
                    to_date = date[2]+"-"+date[1]+"-"+date[0];
                    System.out.println("Entered range is from " +from_date+" to "+to_date);
                    query = "from TransactionDetails where  register_id="+hb_id+" and transaction_date>='"+from_date+"' and transaction_date<='"+to_date+"'" ;
                    System.out.println("Current month query is: " +query);

                }
                if("category".equals(request.getParameter("filter_type")))
                {
                    System.out.println("Category");
                    String  category =request.getParameter("t_filter_category");
                    System.out.println("Entered category is: "+category);
                    query = "from TransactionDetails where  register_id="+hb_id+" and category='"+category+"'" ;
                    System.out.println("Current month query is: " +query);
                }

データベースから正しい出力を取得しています..しかし、このデータをバインドする方法や、jgridでこのデータを取得する方法がわかりません。これが私のグリッドです

function fillGridOnEvent(){
            $("#Transaction_grid").html("<table id=\"transaction_list\"></table><div id=\"page\"></div>");
           jQuery("#transaction_list").jqGrid({
                url:'http://localhost:8084/HomeBudget/TransactionController?action=show&rid=<%=hb_id%>',
                datatype: "xml",
                height: 300,
                colNames:['ID','Date','Type','Category','Amount','Comments'],
                colModel:[
                    {name:'transaction_id',index:'transaction_id', width:20,sortable:false},
                    {name:'date',index:'date', width:100,sortable:false},
                    {name:'type',index:'type', width:100,sortable:false},
                    {name:'category',index:'category', width:150,sortable:false},
                    {name:'amount',index:'amount', width:100,sortable:false, formatter: 'number'},
                    {name:'comments',index:'comments', width:210,sortable:false}
                ],
                paging: true,
                rowNum:15,
                rowList:[15,30,45],
                pager: $("#page"),
                loadonce:true,
                multiselect: false,
                gridview:true,
                viewrecords:true,
                caption: "Transaction"
              }).navGrid('#page',{edit:false,add:false,del:false},{multipleSearch:true, multipleGroup:true, showQuery: true});  

}

4

1 に答える 1

0

私はあなたを正しく理解しているかどうか確信が持てません。しかし、私の解決策は(私はjqGrid wizh JavaとC#を使用した長年の経験があります)

  1. jqGrid データの json を返すサーブレット/ハンドラーを定義するには
  2. サーブレットのパラメーター化 (フィルターの実装)
  3. 新しい jqGrid パラメータを設定します (パラメータはフォーム フィールドから読み取られます)

    $("#" + table).setGridParam({
        postData:queryString
    });
    
  4. jqGrid をリロードする

$("#" + table).jqGrid().trigger("reloadGrid");

于 2012-11-06T16:15:22.110 に答える