2016-09-25 5 views
0

検索フィールドを持つテーブル(マルチセレクションモード)があります。検索すると、検索結果の値が自動的に表の対応する行をチェックする方法がありますか?当初は検索できましたが、結果の長さが1の場合は、テーブルのgetItems()を実行し、最初の行でsetSelected = trueを実行します。行が選択されますが、検索を終了すると、その行は選択解除されます。入力検索の値に基づいてテーブル行をチェックするSAPUI5

 var oSerialTable = new sap.m.Table({ 
      mode: sap.m.ListMode.MultiSelect, 
      columns: [ 
       ... 
      ], 
      items : { 
        path : "/results", 
        template: new sap.m.ColumnListItem({ 
         cells: [ 
         new sap.m.Text({ text: "{Sernr}" }), 
         new sap.m.Text({ text: "{Equnr}" }), 
         new sap.m.Text({ text: "{Lbbsa}" }) 
         ] 
         }) 
      }, 
      select : function(evt){ 

      }, 
      updateFinished: function(){ 
       var aItems = oTable.getItems(); 
       console.log(aItems); 
       if (aItems.length == 1){ 
       console.log(aItems[0]); 
       aItems[0].setSelected(true) 
       } 

      } 
     }); 

     oSerialTable.setModel(ocheckSerialBatchJsonModel); 


     var oSerialTableSearch = new sap.m.SearchField({ 

      search: function(oEvent){ 

      var filterValue = oEvent.getSource().getValue(); 
      var aFilter = new sap.ui.model.Filter("Sernr", sap.ui.model.FilterOperator.EQ, filterValue); 
      var oItemTemplate = new sap.m.ColumnListItem({ 
       cells: [ 
        new sap.m.Text({ text: "{Sernr}" }), 
         new sap.m.Text({ text: "{Equnr}" }), 
         new sap.m.Text({ text: "{Lbbsa}" }) 


       ] 
      }); 

       oSerialTableSearch.bindItems({path:"/SerialSet", template:oItemTemplate, filters: [aFilter]}); 


      } 

     }); 

答えて

0

これは、あなたのモデルにColumnListItemselected propertyをバインドする場合ははるかに容易になります。 次に、あなたのモデルデータにフィルタリングし、選択を行うことができます。

...  
       template: new sap.m.ColumnListItem({ 
        cells: [ 
        new sap.m.Text({ text: "{Sernr}" }), 
        new sap.m.Text({ text: "{Equnr}" }), 
        new sap.m.Text({ text: "{Lbbsa}" }) 
        ], 
        selected: "{selected}" //Bind selection to model 
        }) 

    ... 

    var oSerialTableSearch = new sap.m.SearchField({ 
     search: function(oEvent){ 
      var filterValue = oEvent.getSource().getValue(); 
      var array = ocheckSerialBatchJsonModel.getProperty("/results"); 
      array.forEach(function(item){ 
       //update selected state of each item 
       item.selected = (item.Sernr == filterValue || item.Equnr == filterValue || item. Lbbsa === filterValue); 
      }); 
      ocheckSerialBatchJsonModel.setProperty("/results",array); //Write back to Model to update bindings 
     } 
    }); 

例をJSBin上のあなたのコードで。

+0

この例をありがとうございます。私がそうすることは簡単です。質問は、ユーザーが検索すると、以前に選択された遺跡の価値があるということですか?したがって、123を検索すると123が選択され、124を再度検索すると、それも選択されます(123も選択されます)。私はこれのために私のodataにpostメソッドをしなければならないのですか?これは私が考えていたものです。 – melai

+0

'item.selected =(item.selected || item.Sernr == filterValue || ...)'にコードを追加すると、選択した項目を選択したままにすることができます。 – schnoedel

+0

私は見る!すばらしいです!お手伝いありがとう! – melai

関連する問題