看看是什么问题

liush8421 2013-02-02 01:17:35
RCP完成一个View如图所示:

在此界面中我第一次可以添加保存成功,但第二次却不能成功。不添加,只修改没有问题。添加后进行删除操作后如果在添加,仍然可以成功保存!
代码如下:
public class SPClassView extends ViewPart {
...
public void createPartControl(Composite parent) {
...
tv = new TreeViewer(group, SWT.BORDER);
tree = tv.getTree();
...
tv.setContentProvider(new TreeContentProvider());
tv.setLabelProvider(new TreeLabelProvider());
tv.setInput(TreeData());
tableViewer = new TableViewer(group, style);

table = tableViewer.getTable();
table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
table.setLinesVisible(true);
table.setHeaderVisible(true);
TableLayout layout = new TableLayout();
table.setLayout(layout);
layout.addColumnData(new ColumnWeightData(100));
final TableColumn newColumnTableColumn_1 = new TableColumn(table,SWT.CENTER);
newColumnTableColumn_1.setWidth(100);
newColumnTableColumn_1.setText("分类名");
...
tableViewer.setContentProvider(new TableViewerContentProvider());
tableViewer.setLabelProvider(new TableViewerLabelProvider());
SearchSQL = new StringBuilder();
SearchSQL.append("select * from SPClass where SPParent=0");

Tabledata = spf.getSPClass(SearchSQL.toString());
tableViewer.setInput(Tabledata);
tv.addPostSelectionChangedListener(listener);
tableViewer.setColumnProperties(new String[] { "SPClass", "SPCode",
"SPIsUsable" });
CellEditor[] cellEditor = new CellEditor[4];
cellEditor[0] = new TextCellEditor(table);
cellEditor[1] = null;
cellEditor[2] = new ComboBoxCellEditor(table, isusables, SWT.NONE);
tableViewer.setCellEditors(cellEditor);
ICellModifier modifier = new SPClassCellModifier(tableViewer);
tableViewer.setCellModifier(modifier);
createActions();
initializeToolBar();
initializeMenu();
createContextMenu(parent);
}
private Object TreeData() {
SearchSQL = new StringBuilder("select * from SPClass");
SPClassList treelist = new SPClassList();
return treelist.getTreeViewList(SearchSQL.toString());
}
// 删除树中节点
private Object DelNode(String val, Vector data) {
for (int i = 0; i < data.size(); i++) {
SPClassEntiry sp = (SPClassEntiry) data.get(i);
if (sp.getClassName().equals(val))
data.remove(i);
if (sp.getChildren().size() > 0)
DelNode(val, sp.getChildren());
}
return data;
}

// 修改树中节点
private Object ModNode(SPClassEntiry val, Vector data) {
for (int i = 0; i < data.size(); i++) {
SPClassEntiry sp = (SPClassEntiry) data.get(i);
if (sp.getID().equals(val.getID())) {
sp.setClassName(val.getClassName());
sp.setClassCode(val.getClassCode());
break;
}
if (sp.getChildren().size() > 0)
ModNode(val, sp.getChildren());
}
return data;
}
// 添加节点
private Object AddNode(SPClassEntiry val, Vector data) {
for (int i = 0; i < data.size(); i++) {
SPClassEntiry sp = (SPClassEntiry) data.get(i);
if (sp.getID().equals(val.getPID())) {
((SPClassEntiry) data.get(i)).getChildren().add(val);
break;
}
if (sp.getChildren().size() > 0)
AddNode(val, sp.getChildren());
}
return data;
}
private void createActions() {
Add = new Action() {
public void run() {
SPClassEntiry spc = null;
IStructuredSelection iis = (IStructuredSelection) tv
.getSelection();
Object obj = iis.getFirstElement();
if (obj instanceof SPClassEntiry) {
spc = (SPClassEntiry) obj;
PID = spc.getID();
PCode = spc.getClassCode();
}
SPClassEntiry temp = new SPClassEntiry();
TableItem[] tableItem = tableViewer.getTable().getItems();
// 分类编号过程
...
temp.setChildren(new Vector());
temp.setClassCode(SubCode);
temp.setClassName("");
temp.setPID(PID);
temp.setIsUsable(1);
((Vector) Tabledata).add(temp);
tableViewer.refresh(Tabledata); // System.out.println(SubCode);
}
};
Add.setText("添加");
Del = new Action() {
public void run() {
IStructuredSelection iis = (IStructuredSelection) tableViewer
.getSelection();
SPClassEntiry spc = (SPClassEntiry) iis.getFirstElement();
Vector tablespclass = (Vector) Tabledata;
tablespclass.remove(spc);
sql1 = "delete from SPClass where SPID=" + spc.getID();
DBConn.ExecuteUpdate(sql1);
tableViewer.refresh(tablespclass);
tv.refresh(DelNode(spc.getClassName(), (Vector) tv.getInput()));
}
}
};
Del.setText("删除");
Save = new Action() {
public void run() {
String sql = "";
String PID = "";
TableItem[] treevalue = tableViewer.getTable().getItems();
for (int i = 0; i < treevalue.length; i++) {
SPClassEntiry temp = (SPClassEntiry) treevalue[i].getData();
String usable = "1";
PID = temp.getPID();
if (temp.getIsUsable().equals("可用")) {
usable = "1";
} else {
usable = "0";
}
sql = "select * from SPClass where SPCode='"
+ temp.getClassCode() + "'";
if (DBConn.RecordIsExist(sql)) {
sql = "update SPClass set SPClass='";
sql += temp.getClassName() + "',SPIsUsable=" + usable;
sql += " where SPCode='" + temp.getClassCode() + "'";
DBConn.ExecuteUpdate(sql);
tv.refresh(ModNode(temp, (Vector) tv.getInput()));
} else {
sql = "insert into SPClass(SPCode,SPClass,SPIsUsable,SPParent) values";
sql += "('" + temp.getClassCode() + "','"
+ temp.getClassName() + "'," + usable + ","
+ PID + ")";
DBConn.ExecuteUpdate(sql);
tv.refresh(AddNode(temp, (Vector) tv.getInput()));
}
}
MessageDialog.openInformation(null, "提示", "保存成功");
}
};
Save.setText("保存");
}
private void initializeToolBar() {
IToolBarManager toolbarManager = getViewSite().getActionBars()
.getToolBarManager();
toolbarManager.add(PubMethod.ToolShowText(Add));
toolbarManager.add(PubMethod.ToolShowText(Del));
toolbarManager.add(PubMethod.ToolShowText(Save));
}
public class TreeLabelProvider implements ILabelProvider {
public String getText(Object element) {
return ((SPClassEntiry) element).getClassName();
}
public Image getImage(Object element) {
return null;
}
public void addListener(ILabelProviderListener listener) {}
public void dispose() { }
public boolean isLabelProperty(Object element, String property) {
return false;
}
public void removeListener(ILabelProviderListener listener) {}
}
public class TableViewerLabelProvider implements ITableLabelProvider {
public String getColumnText(Object element, int col) {
SPClassEntiry o = (SPClassEntiry) element; // 类型转换
if (col == 0)
return o.getClassName();
if (col == 1)
return o.getClassCode();
if (col == 2)
return o.getIsUsable();
return null;
}
public Image getColumnImage(Object element, int col) {
return null;
}
public void dispose() { }
public boolean isLabelProperty(Object element, String property) {
return false;
}
public void addListener(ILabelProviderListener listener) {}

public void removeListener(ILabelProviderListener listener) {}
}
public class SPClassCellModifier implements ICellModifier {
private TableViewer viewer;
public SPClassCellModifier(TableViewer tv) {
this.viewer = tv;
}
public boolean canModify(Object element, String property) {
return true;
}
public Object getValue(Object element, String property) {
SPClassEntiry p = (SPClassEntiry) element;
if (property.equals("SPClass")) {
return p.getClassName();
} else if (property.equals("SPIsUsable")) {
return new Integer(getNameIndex(p.getIsUsable()));
}
throw new RuntimeException("错误列名 : " + property);
}
private int getNameIndex(String name) {
for (int i = 0; i < isusables.length; i++) {
if (isusables[i].equals(name)) {
return i;
}
}
return -1;
}
public void modify(Object element, String property, Object value) {
TableItem item = (TableItem) element;
SPClassEntiry p = (SPClassEntiry) item.getData();
int usable = 0;
if (property.equals("SPIsUsable")) {
Integer comboIndex = (Integer) value;
if (comboIndex.intValue() == -1) {
return;
}
String newName = isusables[comboIndex.intValue()];
if (newName == "可用")
usable = 1;
else
usable = 0;
p.setIsUsable(usable);
} else if (property.equals("SPClass")) {
String newValue = (String) value;
if (newValue.equals("")) {
return;
}
p.setClassName(newValue);
} else {
throw new RuntimeException("错误列名:" + property);
}
viewer.update(p, null);
}
}
public class TreeListener implements ISelectionChangedListener {
public void selectionChanged(final SelectionChangedEvent event) {
setTable();
}
}
public void setTable(){
IStructuredSelection iis = (IStructuredSelection) tv.getSelection();
SPClassEntiry spc = (SPClassEntiry) iis.getFirstElement();
SearchSQL = new StringBuilder();
SearchSQL.append("select * from SPClass where SPParent="
+ spc.getID());
Tabledata = spf.getSPClass(SearchSQL.toString());
tableViewer.setInput(Tabledata);
}
}
请高手帮忙看看是什么问题,该如何解决??
...全文
265 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
liush8421 2013-02-02
  • 打赏
  • 举报
回复
哦,解决了! 问题在添加后的的temp这个SPClassEntiry缺少ID属性,在添加成功后,在从数据库中将该条记录调出来后再传给AddNode就可以了!
内容概要:本文围绕“非线性流量的数据驱动Koopman模型预测控制研究”展开,提出一种基于数据驱动的Koopman算子理论方法,用于构建非线性系统的线性化状态空间模型,并结合模型预测控制(MPC)实现对复杂非线性系统的高效控制。研究通过引入扩展动态模态分解(EDMD)等观测函数,将非线性动力学映射至高维特征空间,在该空间中实现近似线性化表征,进而融合线性MPC框架进行优化求解。全文系统阐述了Koopman算子的数学基础、隐式线性化机制及在非线性流量控制中的建模流程,并通过Matlab代码完成了算法实现与仿真实验,验证了该方法在处理无精确物理模型、强非线性、时变动态系统中的有效性与鲁棒性,尤其适用于工业流程控制、能源系统调度等实际工程场景。; 适合人群:具备自动控制理论、非线性系统分析基础,熟悉Matlab编程,从事控制工程、系统辨识、智能优化、能源系统建模等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于难以建立精确数学模型的复杂非线性系统(如流体动力系统、电力电子系统、机器人动力学等)的建模与实时控制;②实现数据驱动下的模型预测控制,提升系统响应速度与控制精度;③为先进控制策略(如MPC)提供一种可行的线性化建模范式,推动现代控制理论与数据科学、机器学习的深度融合。; 阅读建议:建议读者结合提供的Matlab代码深入理解Koopman方法的具体实现过程,重点关注观测函数构造、核函数选择、矩阵逼近、降维处理及MPC控制器设计等关键技术环节,并尝试将其迁移至其他非线性系统中进行复现实验与性能对比,以全面掌握其适用范围与局限性。
内容概要:本文详细介绍了一种基于Simulink的光伏储能单相逆变器并网仿真模型,系统涵盖了光伏阵列、储能单元、DC-AC单相逆变器及并网接口的完整结构,重点实现了储能环节的能量管理与逆变器并网控制策略的建模仿真。通过Simulink平台构建系统模型,验证了逆变器输出电能质量、并网稳定性以及控制系统的动态响应性能,采用SPWM调制、PI闭环控制等关键技术,确保并网电流与电网电压同频同相,满足并网电能质量要求。该模型不仅可用于分布式能源系统的仿真研究,还可作为新能源并网技术的教学与工程实践工具。; 适合人群:电气工程、自动化、新能源科学与工程等相关专业的高校本科生、研究生、科研人员,以及从事光伏发电系统设计、储能控制与并网技术研发的工程技术人员。; 使用场景及目标:①深入理解光伏储能系统中能量转换、存储与并网控制的整体工作原理;②支持课程设计、毕业设计或科研项目中对单相逆变器控制策略(如SPWM、PI调节、锁相技术等)的仿真验证与参数优化;③为后续研究更复杂的控制算法(如MPPT、低电压穿越、谐波抑制等)提供可扩展的仿真基础平台。; 阅读建议:建议结合MATLAB/Simulink环境动手搭建与调试模型,逐步理解各模块(如光伏建模、储能充放电控制、逆变器驱动、锁相环、PI调节器等)的功能与交互关系,重点关注控制系统的设计逻辑与参数整定过程,并可通过修改负载条件或电网参数测试系统鲁棒性,为进一步拓展至三相系统或多机并网场景奠定基础。

58,441

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧