Hinzufügen einer Schaltfläche "entfernen", um eine Spalte in einer Tabelle
Ist es möglich, fügen Sie ein Entfernen - Taste, um eine Zelle in einer Tabelle?
Ich habe eine Tabelle mit 5 Spalten, ich möchte eine 6. Spalte. Ich will die 6. Spalte eine Schaltfläche "entfernen" in jeder Zeile.
Beispiel Zeile:
| 10002 | Teil - | Metall - | 001 | ja | Entfernen |
Diese Weise der Benutzer kann entfernen Sie alle unerwünschten Zeilen, indem Sie einfach die Taste.
Habe ich eine markup-Spalte in der Tabelle und es ist ComboBox
. Ich erstellte eine Klasse, die Sie erweitert EditingSupport
.
Würde ich brauchen, um eine weitere Klasse erweitern EditingSupport
, aber einen "button" statt ComboBox
?
BEARBEITEN
public class AplotDataTableViewer extends TableViewer
{
public AplotDataTableViewer(Composite parent, int style)
{
super(parent, style);
Table table = getTable();
GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
table.setLayoutData(gridData);
createColumns();
table.setHeaderVisible(true);
table.setLinesVisible(true);
setContentProvider(new ArrayContentProvider());
}
private void createColumns() {
String[] titles = { "ItemId", "RevId", "PRL", "Dataset Name", "EC Markup" };
int[] bounds = { 150, 150, 100, 150, 100 };
TableViewerColumn col = createTableViewerColumn(titles[0], bounds[0], 0);
col.setLabelProvider(new ColumnLabelProvider() {
public String getText(Object element) {
if(element instanceof AplotDataModel.AplotDatasetData)
return ((AplotDataModel.AplotDatasetData)element).getDataset().toString();
return super.getText(element);
}
});
col = createTableViewerColumn(titles[1], bounds[1], 1);
col.setLabelProvider(new ColumnLabelProvider() {
public String getText(Object element) {
if(element instanceof AplotDataModel.AplotDatasetData)
return ((AplotDataModel.AplotDatasetData)element).getRev().toString();
return super.getText(element);
}
});
col = createTableViewerColumn(titles[2], bounds[2], 2);
col.setLabelProvider(new ColumnLabelProvider() {
public String getText(Object element) {
if(element instanceof AplotDataModel.AplotDatasetData)
return ((AplotDataModel.AplotDatasetData)element).getPRLValue().toString();
return super.getText(element);
}
});
col = createTableViewerColumn(titles[3], bounds[3], 3);
col.setLabelProvider(new ColumnLabelProvider() {
public String getText(Object element) {
if(element instanceof AplotDataModel.AplotDatasetData)
return ((AplotDataModel.AplotDatasetData)element).getDatasetName().toString();
return super.getText(element);
}
});
col = createTableViewerColumn(titles[4], bounds[4], 4);
col.setLabelProvider(new ColumnLabelProvider() {
public String getText(Object element) {
if(element instanceof AplotDataModel.AplotDatasetData)
return ((AplotDataModel.AplotDatasetData)element).getMarkupValue();
return super.getText(element);
}
});
col.setEditingSupport(new OptionEditingSupport(this));
}
private TableViewerColumn createTableViewerColumn(String header, int width, int idx)
{
TableViewerColumn column = new TableViewerColumn(this, SWT.LEFT, idx);
column.getColumn().setText(header);
column.getColumn().setWidth(width);
column.getColumn().setResizable(true);
column.getColumn().setMoveable(true);
return column;
}
}
BEARBEITEN
col = createTableViewerColumn(titles[5], bounds[5], 5);
col.setLabelProvider(new ColumnLabelProvider() {
@Override
public void update(ViewerCell cell) {
TableItem item = new TableItem(getTable(),SWT.NONE);
Button button = new Button(getTable(),SWT.NONE);
button.setText("X");
getControl().setBackground(item.getBackground());
TableEditor editor = new TableEditor(getTable());
editor.grabHorizontal = true;
editor.grabVertical = true;
editor.setEditor(button , item, columnIndex);
editor.layout();
}
});
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist Probe funktionierende version.
Zusätzlich zu der Antwort von @sambi.reddy es ist ein Kommentar, der sagt - "stellen Sie sicher, dass Sie über diese Schaltflächen im viewer-Eingang änderungen". Dies ist, was ich tun musste, um zu bekommen, dass ein Teil der Arbeit.
Den Rahmen, den ich verwendet hatte, eine Implementierung von IStructuredContentProvider, so in der überschriebenen inputChanged(...), hatte ich, um in den folgenden code:-
Dies funktioniert gut, außer wenn Sie eine Tabelle aktualisieren (ie. viewer.setInput(Liste)) nennen als Ergebnis Sie die Taste Aktion. Wenn ich dazu die folgende Zeile manchmal kehrte Tasten, die noch existierte, aber die wurden entsorgt:
So, ich brauchte, um zu aktualisieren diese Zeile:
Führte in jedem der Entsorgung Tasten neu erstellt, falls Sie noch benötigt werden.
Eine wichtige Sache, um die gewählte Antwort ist, dass Sie sollten nicht erstellen Sie eine Instanz der TableEditor auf jede update-Methode aufrufen, es wird sich verlangsamen die Leistung oder auch die Anwendung unresposnive.
Code unten sollte für Sie arbeiten