Ajout d'un bouton "supprimer" pour une colonne dans une table
Est-il possible d'ajouter un Supprimer bouton à une cellule dans un tableau?
J'ai une table avec 5 colonnes, je voudrais ajouter une 6e colonne. Je veux la 6e colonne d'avoir un bouton supprimer dans chaque ligne.
Exemple De Ligne:
| 10002 | partie | en Métal | 001 | Oui | Supprimer |
De cette façon, l'utilisateur peut supprimer des lignes en cliquant simplement sur le bouton.
J'ai une majoration de la colonne dans la table et il est ComboBox
. J'ai créé une classe qui étend la classe EditingSupport
.
Aurais-je besoin de faire une autre classe étendant EditingSupport
, mais la création d'un bouton au lieu de ComboBox
?
MODIFIER
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;
}
}
MODIFIER
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();
}
});
OriginalL'auteur jkteater | 2012-09-18
Vous devez vous connecter pour publier un commentaire.
Voici un exemple de version de travail.
Oh mon dieu, je vous remercie !
OriginalL'auteur sambi reddy
En plus de la réponse de @sambi.reddy il y a un commentaire qui dit "assurez-vous de disposer de ces boutons lorsque le spectateur d'une entrée à l'". C'est ce que j'avais à faire pour obtenir la partie de travail.
Le cadre que j'ai utilisé avait une mise en œuvre de IStructuredContentProvider, donc dans le substituée inputChanged(...), j'ai dû mettre dans le code suivant:-
Cela fonctionne très bien, sauf si vous avez une actualisation de la table (c'est à dire. la visionneuse.setInput(Liste)) appel comme le résultat de-vous l'action du bouton. Quand j'ai ajouté ce la ligne suivante renvoyée parfois des boutons qui existaient encore, mais ont été éliminés:
J'ai donc besoin de mettre à jour cette ligne:
Qui conduit à une élimination des boutons de recréation, s'ils étaient encore nécessaires.
OriginalL'auteur simo.37920
Une chose importante à la réponse choisie, c'est que vous ne devez pas créer une instance de TableEditor à chaque mise à jour de l'appel de méthode, il va ralentir les performances ou même d'en faire la demande unresposnive.
OriginalL'auteur Dominik K
Ci-dessous le code qui devrait fonctionner pour vous
Veuillez remplacer ColumnLabelProvider.mise à jour(ViewerCell cellules) pour tableviewercolumn où vous voulez afficher ce bouton. De ViewerCell vous pouvez obtenir getItem, getColumnIndex. Assurez-vous de garder une trace des boutons que vous créez pour chaque ligne d'objet et les disposer lors de l'observateur d'entrée change. Garder les boutons sur une carte pour chaque rowdata, avant de créer n'importe quel bouton vérifier qu'il est déjà là dans la carte.
Je suis désolé, mais je vais avoir quelques problèmes en essayant de tenir compte de vos conseils dans mon code. J'ai besoin de lire plus sur ViewerCells
Remplacer mise à jour(ViewerCell cellule) dans les ColumnLabelProvider au lieu getText() dans votre code et le code que j'ai fourni ci-dessus.
Je vais coller la colonne code ci-dessus. Je reçois la colonne, mais il n'y a pas de boutons visibles. Je suis sûr que j'ai sans doute raté quelque chose d'autre
OriginalL'auteur sambi reddy