[TableEditor] Problème de refresh
Bonjour,
Je travaille actuellement sur un logiciel de gestion de projet utilisant Java SWT.
J'utilise entre autres des SWT Table, TableViewer, TableEditor pour attribuer à des utilisateurs des volumes horaires par tâche avec un tableau à double entrée.
Quand l'utilisateur fait Clic droit > Voir fiche projet sur le projet, le programme remplit ce tableau de "0" et accède bien à la base de données, puis envoie les données recueillies dans le tableau (remplaçant les "0" non désirés). Cela marche bien et fait exactement ce que je veux. Comme vous pouvez le voir sur ce screenshot il y a bien une concordance entre la base de données et mon Table.
http://img839.imageshack.us/img839/7...myadmib.th.png
Le problème, est que quand je fais Clic droit > Voir fiche projet sur un autre projet, je veux que les nouveaux temps de travail attribués remplacent les anciens mais ça ne marche pas : pour un 2ème projet je vois toujours les temps attribués au premier projet. En gros mon tableau ne se refresh pas.
Avec un simple débug 'SOP', je vois clairement que la boucle de 'setText("0")' supposée écraser les anciennes valeurs est atteinte mais on dirait qu'elle n'a pas d'effet. En fait, je me suis rendu compte plus tard qu'elle a l'effet d'ajouter de nouvelles lignes "fantômes" à mon tableau, qui sont vides. Cela est probablement dû au fait que mon Text[] texte est un tableau et quand je fais
Code:
texte = new Text(table2, SWT.NONE);
ça se stack, générant les lignes vides. Je ne comprends pas cependant pourquoi ces lignes sont vides.
http://img585.imageshack.us/img585/9176/screenpb.th.png
Voici maintenant à quoi ressemble la fonction incriminée.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| public void fillSubtasks(Task selectedTask) throws DbException {
table2.clearAll();
// I generate items to put the name of the subtasks corresponding to a project
for (int j = 0; j < selectedTask.getSubTasksCount(); j++) {
new TableItem(table2, SWT.NONE);
}
// I fill items with subtasks names
items = table2.getItems();
final Task[] subtasktable = ModelMgr.getSubtasks(selectedTask);
for (int i = 0; i < selectedTask.getSubTasksCount(); i++) {
items[i].setText(subtasktable[i].getName());
}
DbTransaction tx = DbMgr.beginTransaction();
// I store the users registered in the software
final Collaborator[] collabs = DbMgr.getCollaborators(tx, 1, true, true);
DbMgr.commitTransaction(tx);
DbMgr.endTransaction(tx);
for (int i = 0; i < collabs.length; i++) {
for (int j = 0; j < selectedTask.getSubTasksCount(); j++) {
final int cit = i;
final int cjt = j;
tx = DbMgr.beginTransaction();
editor = new TableEditor(table2);
editor.grabHorizontal = true;
final Text texte = new Text(table2, SWT.NONE);
// Fill with "0"s
texte.setText("0");
// Replace it if a contribution exists in the DB
if (DbMgr.attributedTaskExists(tx, collabs[i], subtasktable[j]) != 0) {
texte.setText(String.valueOf(DbMgr.getAttributedTask(tx, collabs[cit].getLogin(), subtasktable[cjt])));
}
DbMgr.commitTransaction(tx);
DbMgr.endTransaction(tx);
texte.addModifyListener(new ModifyListener()
{
public void modifyText(ModifyEvent evt) {
System.out.println("text " + texte.getText());
try {
DbTransaction tx = DbMgr.beginTransaction();
DbMgr.getAttributedTask(tx, collabs[cit].getLogin(), subtasktable[cjt]);
DbMgr.updateAttributedTask(tx, collabs[cit].getLogin(), subtasktable[cjt], Integer.parseInt(texte.getText()));
DbMgr.commitTransaction(tx);
DbMgr.endTransaction(tx);
}
catch (DbException e) {
e.printStackTrace();
}
}
});
editor.setEditor(texte, items[j], i + 1);
}
}
k++;
} |
Que puis-je faire pour éviter ça ?
Merci d'avance pour votre aide.