[Gvsig_desarrolladores] Problemas edición capa con 1 Feature
Domingo Baeza
dbaeza en blom.es
Mie Oct 24 09:33:49 CEST 2007
Buenos días,
Tengo un problema muy extraño con la edición de shapes.
Mi proyecto consiste en editar shapes(la mayoría de los Shape sólo
tienen 1 Feature), he desarrollado una extensión, para pedir información
y obtener en un formulario los datos de la feature, donde los puedo cambiar.
El proceso es el siguiente:
* - Paso1. Pongo la capa en edición (Botón derecho sobre la
capa Comenzar-Edición)*
* - Paso2. Con la extensión pido la información de cada
feature, donde aparecen correctamente y la puedo cambiar. En el
formulario tengo un botón de guardar datos que contiene más o menos el
siguiente código:
*
* public void editar(ArrayList lstDatos){*
AlphanumericData co = (AlphanumericData) layer;
ProjectExtension ext = (ProjectExtension)
PluginServices.getExtension(ProjectExtension.class);
ProjectTable projectTable = ext.getProject().getTable(co);
EditableAdapter ea=null;
ReadableVectorial rv=((FLyrVect)layer).getSource();
if (rv instanceof VectorialEditableAdapter){
ea=(EditableAdapter)((FLyrVect)layer).getSource();
}else{
ea=new EditableAdapter();
SelectableDataSource sds = null;
try {
sds = ((FLyrVect)layer).getRecordset();
} catch (DriverException ee) {
// TODO Auto-generated catch block
ee.printStackTrace();
}
try {
ea.setOriginalDataSource(sds);
} catch
(com.hardcode.gdbms.engine.data.driver.DriverException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (projectTable == null) {
try {
projectTable =
ProjectFactory.createTable(PluginServices.getText(this,
"Tabla_de_Atributos") + ": " + layer.getName(),
ea);
} catch
(com.hardcode.gdbms.engine.data.driver.DriverException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
}
projectTable.setAssociatedTable(co);
}
projectTable.setModel(ea);
Table t = new Table();
t.setModel(projectTable);
DataSourceDataModel dsdm = (DataSourceDataModel)
t.getTable().getModel();
int nIndice = Integer.parseInt(oNodo.toString());
Iterator i = lstDatos.iterator();
while (i.hasNext()){
ActualizarDatosOT datos = ( ActualizarDatosOT) i.next();
if (datos.getSCampo().equals("N_AREA")){
try {
dsdm.setValueAt(new
Double(rv.getShape(nIndice).toJTSGeometry().getArea()),nIndice,dsdm.findColumn("N_AREA"));
} catch (DriverIOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else {
dsdm.setValueAt(datos.getSValor(),nIndice,dsdm.findColumn(datos.getSCampo()));
}
}
//Con fireTableDataChanged() digamos que refresca la tabla.
((DataSourceDataModel)
t.getTable().getModel()).fireTableDataChanged();
//PluginServices.getMainFrame().enableControls();
//Fin del cambio del registro
}
Después de el código anterior, abro la tabla asociada al shape y
si que veo que en la tabla están los cambios realizados.
* - Paso3. Cerrar la edición de la capa. (Botón derecho sobre la capa
- Terminar Edición)
*Es ahora cuando la capa tiene más de una feature entonces lo guarda
bien, pero cuando la capa sólo tiene una feature, realmente guarda los
cambios, pero no los veo hasta que descargo el Layer y lo vuelvo a cargar.
¿Cómo puedo hacer para que los cambios se vean cuando el layer
sólo tiene una feature?
Un Saludo
Domingo Baeza
Blom SLU.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://runas.cap.gva.es/pipermail/gvsig_desarrolladores/attachments/20071024/a34a2122/attachment.htm
Más información sobre la lista de distribución gvSIG_desarrolladores