2010-04-12 6 views
0

J'ai un JTable rempli de données d'une table de ma base de données (donc j'ai utilisé ResultSetTableModel) et en utilisant TableRowSorter pour trier les lignes, comme je clique dans une colonne de le JTable. Les données sont affichées dans le jTable sans problèmes; Mais quand je trier la JTable par une table de colonnes (par exemple, en la triant par la valeur de la clé primaire), et modifier une cellule du jTable trié, la valeur changée est l'ancienne cellule qui était dans cette position avant la ordenation de la colonne.JTable rempli de données de base de données n'est pas mis à jour lorsque les colonnes sont réorganisées

Par exemple: Supposons que j'ai une table avec 2 colonnes - nom et âge. Ma table a les données suivantes:

c 1 
b 2 
a 3 

quand je commande i par nom dans le JTable, il devient comme celui-ci

a 3 
b 2 
c 1 

si je modifier la valeur "1", après l'édition, la table devient comme celui-ci

a 1 
b 2 
c 1 

Il semble que les positions ne sont pas mis à jour dans le JTable et les valeurs sont modifiées compte tenu de leur position d'origine.

Répondre

2

Tout d'abord, notez que les données sont réellement contenues dans le modèle et jtable n'est qu'une vue. Normalement, les lignes et les colonnes de jtable correspondent aux lignes et colonnes de la table. Lorsque vous triez, cette correspondance entre la ligne de jtable, col ne peut rester le même, donc quand vous voulez modifier cellulaire dire (rowVal, colVal), do

table.setValueAt(object,table.convertRowIndexToModel(rowVal),convertColumnIndexToModel(colVal)) 

ce qui devrait préserver la cartographie après le tri. Lire la section Tri et Filtrage ici: