method up_selected =
      let rec iter n selrows l =
        match selrows with
          [] -> (l, [])
        | m :: qrows ->
            match l with
              [] -> ([],[])
            | [_] -> (l,[])
            | e1 :: e2 :: q when m = n + 1 ->
                let newl, newrows = iter (n+1) qrows (e1 :: q) in
                (e2 :: newl, n :: newrows)
            | e1 :: q ->
                let newl, newrows = iter (n+1) selrows q in
                (e1 ::  newl, newrows)
      in
      let sorted_select = List.sort compare list_select in
      let new_list, new_rows = iter 0 sorted_select !listref in
      self#update new_list;
      List.iter (fun n -> wlist#select n 0) new_rows