Namenoobie
Namenoobie

Reputation: 541

Vaadin Table Item removal by click of button

I am using Vaadin 7.1.7.

I have a Table which has a few TextFields and a Button called "delete".

Table with a TextField and a Button

On click of the delete button, that particular row is to be deleted.

As i understand, I could remove table item as follows:

table.removeItem(itemID);

Unfortunately, I am unable to fetch the itemID of the row to remove it from the table.

Since, I used table.addItem(o, null); to addItems to it, how could I get the rowID/itemID on the click of the button inside buttonClickListener?

My trys so far have been:

@Override
public void buttonClick(ClickEvent event) {
Table t =  (Table) event.getButton().getParent();
}

This has got me to the parent table but not to that particular item.

Thanks in advance .

Upvotes: 1

Views: 6973

Answers (2)

André Schild
André Schild

Reputation: 4754

You could for example use setData(rowID) when you create the buttons. The onClick you retrieve the associated data of the button and have the correct row id.

Upvotes: 2

ktbiz
ktbiz

Reputation: 596

Provide a row id, override Button.ClickListener, and use the id in the click listener.

Object rowId = new Object();
Button button = new Button("Delete");
button.addClickListener(new RowDeleteListener(rowId));
//populate cells in the row, add the button & whatever
table.addItem(row, rowId);

public class RowDeleteListener implements Button.ClickListener {
    Object rowId;

    public RowDeleteListener(Object rowId) {
        this.rowId = rowId;
    }    

    public void buttonClick(ClickEvent event) {
        table.removeItem(rowId);
    }
}

Or André Schild’s solution, which is to use setData(rowId) on the button.

Button button = new Button("Delete");
button.addClickListener(new Button.ClickListener() {
    public void buttonClick(ClickEvent event) {
        table.removeItem(getData());
    }
});
//Populate row stuff.
button.setData(table.addItem(row, null));

I like the first solution slightly better because it's more obvious what's going on, and also because the button has the correct row id before it gets added to the table instead of after.

Or, if you feel like creating something obnoxious: you could use the Button object as the id for the row.

Button button = new Button("Delete");
button.addClickListener(new Button.ClickListener() {
    public void buttonClick(ClickEvent event) {
        table.removeItem(this);
    }
});
//populate row stuff, including adding the button to the row.
table.addItem(row, button);

I didn't test or compile any of these so... you know...

Upvotes: 2

Related Questions