@ -310,9 +310,9 @@ public class SmartInsertDBManipulationPane extends DBManipulationPane {
// 单元格组要记录下之前的选中情况
private CellSelection oriCellSelection = null ;
private List < String > newAdd = new ArrayList < String > ( ) ;
private List < ColumnRow > newAdd = new ArrayList < > ( ) ;
private List < String > oldAdd = new ArrayList < String > ( ) ;
private List < ColumnRow > oldAdd = new ArrayList < > ( ) ;
public SmartJTablePane4DB ( KeyColumnTableModel model , ElementCasePane actionReportPane ) {
this ( model , actionReportPane , false ) ;
@ -433,7 +433,8 @@ public class SmartInsertDBManipulationPane extends DBManipulationPane {
if ( ! allColumnRow . contains ( columnRow . toString ( ) ) ) {
add . addColumnRow ( columnRow ) ;
}
// 重新更换区域框选单元格后 清理历史框选
oldAdd . clear ( ) ;
}
if ( add . getSize ( ) > 0 ) {
@ -459,10 +460,11 @@ public class SmartInsertDBManipulationPane extends DBManipulationPane {
TemplateCellElement cellElement = ePane . getEditingElementCase ( ) . getTemplateCellElement ( c + i , r + j ) ;
if ( cellElement ! = null & & ( ( i + c ) ! = 0 | | ( r + j ) ! = 0 ) ) {
String value = cellElement . toString ( ) ;
if ( ! newAdd . contains ( value ) & & ! allColumnRow . contains ( value ) ) {
add . addColumnRow ( ColumnRow . valueOf ( value ) ) ;
ColumnRow columnRow = ColumnRow . valueOf ( value ) ;
if ( ! newAdd . contains ( columnRow ) & & ! allColumnRow . contains ( value ) ) {
add . addColumnRow ( columnRow ) ;
}
newAdd . add ( value ) ;
newAdd . add ( columnRow ) ;
}
if ( cellElement = = null ) {
@ -470,16 +472,14 @@ public class SmartInsertDBManipulationPane extends DBManipulationPane {
if ( ! allColumnRow . contains ( columnRow . toString ( ) ) ) {
add . addColumnRow ( columnRow ) ;
}
newAdd . add ( columnRow . toString ( ) ) ;
newAdd . add ( columnRow ) ;
}
}
}
int oldSize = oldAdd . size ( ) ;
int newSize = newAdd . size ( ) ;
if ( oldSize > newSize & & oldAdd . containsAll ( newAdd ) ) {
int diff = oldSize - newSize ;
newValue . splice ( newValue . getSize ( ) - diff , diff ) ;
}
// 计算出前后两次选中的差值
oldAdd . removeAll ( newAdd ) ;
// 移除差值部分
newValue . removeAll ( oldAdd ) ;
oldAdd . clear ( ) ;
oldAdd . addAll ( newAdd ) ;
}