2016-04-27 2 views
1

Ich erstelle eine Webanwendung, die Vaadin Framework verwendet, aber ich bin mit einem Tabellenelement (Filtertabelle) festgefahren. Meine Tabelle hat eine Spalte, die ComboBox-Komponente in jeder Zeile enthält, jetzt funktioniert das Kombinationsfeld in der Tabelle ordnungsgemäß, aber ich kann nicht auf diese Spalte klicken, um den Tabellenwert auszuwählen. Die Zeile kann in der Tabelle ausgewählt werden, indem Sie auf den Zwischenraum klicken Combobox und Spaltenbegrenzung können jedoch nicht durch Anklicken der Combobox selbst ausgewählt werden. Ich suchte viel und fand https://vaadin.com/forum/#!/thread/988648/988647, versucht, Blackboard Addon zu implementieren, war aber nicht erfolgreich. Mein Code ist ungefähr unter.Kann Tabellenzeile nicht auswählen, indem ich auf ui Komponente in einer Spalte der Tabelle in Vaadin klicke

PagedFilterTable<IndexedContainer> filterTable; 
    `public static PagedFilterTable<IndexedContainer> buildPagedFilterTable() 
     { 
        filterTable = new PagedFilterTable<IndexedContainer>(); 
        filterTable.setFilterBarVisible(true); 
        filterTable.setSelectable(true); 
        filterTable.setImmediate(true); 
        filterTable.setMultiSelect(true); 
        filterTable.setRowHeaderMode(RowHeaderMode.INDEX); 
        filterTable.setColumnCollapsingAllowed(true); 
        filterTable.setContainerDataSource(buildContainer()); 
        filterTable.setVisibleColumns((Object[]) new String[] { 
          "Clear", "Name" }); 
        return filterTable; 
       }` 
      static int f=1; 
       private static Container buildContainer() { 
        IndexedContainer cont = new IndexedContainer(); 


        cont.addContainerProperty("Clear", Component.class, null);// added combobox component 
        cont.addContainerProperty("Name", String.class, null); 


        //populating table with database values (table rows will be = no. of rows in db) 
        Connection con; 
        ResultSet rs; 
        Statement cs; 
        try { 

         Class.forName("oracle.jdbc.driver.OracleDriver"); 
         con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","CGoracle"); 
         cs=con.createStatement(); 
         co=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); 
         rs = cs.executeQuery("select * from ECS_CURRENT"); 
         while(rs.next()) 
         { 

          ComboBox select_reason_return=new ComboBox();   
          select_reason_return.setInputPrompt("Select"); 
          select_reason_return.setVisible(true); 
          select_reason_return.setNullSelectionAllowed(false); 
          select_reason_return.setInvalidAllowed(false); 
          select_reason_return.addItem("1.A/c Closed/Transfered"); 
          select_reason_return.addItem("2.No Such A/c"); 
          select_reason_return.addItem("3.Clear"); 

          select_reason_return.select("3.Clear"); 
          select_reason_return.addListener(new Property.ValueChangeListener() { 


           @Override 
           public void valueChange(ValueChangeEvent event) { 

            String reason=select_reason_return.getValue().toString(); 
          rowId=FilterTable.getValue(); 
          Notification.show("row id is ="+rowId); 
      } 
         }); 

          cont.addItem(f); 

           cont.getContainerProperty(f, "Clear").setValue(select_reason_return); 
           cont.getContainerProperty(f, "Name").setValue(rs.getString(10)); 

          f++; 

         } 

        } 
        catch (SQLException | ClassNotFoundException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 

        return cont; 
       } 

If it helps, I'm posting screenshots, Image 1: if I select anywhere other than the combobox, it is returning row id properly.Image 2: Though I'm selecting an item from combobox, table row is not getting seleced, hence it's not returning me row id. Gibt es eine andere Option als Tafel Add-on? Wenn nein, dann bitte hilf mir das Problem damit zu lösen.

Antwort

0

Ist nicht der beste Ansatz, aber Sie können es tun, indem Sie einen Listener auf der ComboBox platzieren, um zu wissen, wann er geklickt wird. Dann erhalten Sie in diesem Fall die Zeile, die der ComboBox zugeordnet ist, um schließlich eine ID mit dieser Zeile zu verknüpfen.

Sobald Sie die Zeilen-ID verwenden, verwenden Sie die Table.select() - Methode, um die Elementzeile auszuwählen.

Es ist nicht der beste Ansatz und wenn Sie viele Zeilen haben, werden Sie fühlen, wie es eine langsame Antwort bekommt, aber es ist der einzige programmatische Weg, den ich gefunden habe, damit es funktioniert. Ich hoffe es hilft.

+0

Ich habe Ihre vorgeschlagene Methode in den Code oben implementiert, aber es gibt mir Zeile Id als null zurück, haben Screenshots oben angefügt, um das gleiche zu zeigen. – Ahmey

Verwandte Themen