Adding a record when xml is empty? - Ext JS

本文探讨了在ExtJS框架中如何解决向初始为空的表格添加记录的问题,并提供了一个使用ExtJS alpha3 rev2版本成功实现的例子。
Hi I am testing it in alpha2:

var condition = new record({
ExternalId: '0',
Name: 'Mostly Shade',
Description: 'a description',
Condition: 'a Condition',
Contex: 'a Context',
AValue: 'a Context',
Attribute: 'a Context',
Operator: 'a Context',
SearchType: 'a Context'
});
ds.insert(0, condition);
gridSearchCondition.startEditing(0, 0);

and work ok when the xml have rows, but don't work (I get error) when the xml is empty, the objects Ext.grid.ColumnModel, Ext.data.Store, Ext.data.XmlReader don't have enough information to detect 0 rows and create a row?

which is the better way to add a row when is empty the xml in ext1?

kind regards
Frank
Reply With Quote
  #2  
Old 03-08-2007, 12:59 PM
Default

hi frank, did you find a solution for this problem?
Reply With Quote
  #3  
Old 03-08-2007, 05:02 PM
Default

hicker now I was testing using ext1 alpha3 rev2 and it work ok

InsertAddress: function(){

var adataSource = gridAddress.getDataSource();
adataSource.clearFilter();
r = showGridContactAddress.onGetRecord();
var recAddress = new r({
ExternalId: '0',
Flag: '3',
Address1: 'Type an Address ',
Address2: '',
City: '',
Country: '',
County: '',
PostalCode: '',
StateAbbreviation: '',
Zip: '',
AddressType: 'Postal'


});

recAddress.modified = true;
adataSource.insert(0, recAddress);
var Count = adataSource.data.items.length;
gridAddress.startEditing(0, 0);
adataSource.filter('Flag', /[^1]/);//show row different 1

}

I mean I have a grid with 0 rows and I can add a new record, are you test it with alpha3 rev2?


kind regards
Frank
Reply With Quote
  #4  
Old 03-09-2007, 05:11 AM
Default

thanks for the reply.
i'm new to yuiext and couldn't understand the type of showGridContactAddress.
Reply With Quote
  #5  
Old 03-09-2007, 06:32 AM
Default

i made what i want with this code..
var r=new Ext.data.Record({id:0,code_type:edt_code_type.el.dom.value,code:edt_code.el.dom.value});
codes_ds.add([r]);
Reply With Quote
内容概要:本文围绕EKF SLAM(扩展卡尔曼滤波同步定位与地图构建)的性能展开多项对比实验研究,重点分析在稀疏与稠密landmark环境下、预测与更新步骤同时进行与非同时进行的情况下的系统性能差异,并进一步探讨EKF SLAM在有色噪声干扰下的鲁棒性表现。实验考虑了不确定性因素的影响,旨在评估不同条件下算法的定位精度与地图构建质量,为实际应用中EKF SLAM的优化提供依据。文档还提及多智能体系统在遭受DoS攻击下的弹性控制研究,但核心内容聚焦于SLAM算法的性能测试与分析。; 适合人群:具备一定机器人学、状态估计或自动驾驶基础知识的科研人员及工程技术人员,尤其是从事SLAM算法研究或应用开发的硕士、博士研究生和相关领域研发人员。; 使用场景及目标:①用于比较EKF SLAM在不同landmark密度下的性能表现;②分析预测与更新机制同步与否对滤波器稳定性与精度的影响;③评估系统在有色噪声等非理想观测条件下的适应能力,提升实际部署中的可靠性。; 阅读建议:建议结合MATLAB仿真代码进行实验复现,重点关注状态协方差传播、观测更新频率与噪声模型设置等关键环节,深入理解EKF SLAM在复杂环境下的行为特性。稀疏 landmark 与稠密 landmark 下 EKF SLAM 性能对比实验,预测更新同时进行与非同时进行对比 EKF SLAM 性能对比实验,EKF SLAM 在有色噪声下性能实验
内容概要:本文围绕“基于主从博弈的售电商多元零售套餐设计与多级市场购电策略”展开,结合Matlab代码实现,提出了一种适用于电力市场化环境下的售电商优化决策模型。该模型采用主从博弈(Stackelberg Game)理论构建售电商与用户之间的互动关系,售电商作为领导者制定电价套餐策略,用户作为跟随者响应电价并调整用电行为。同时,模型综合考虑售电商在多级电力市场(如日前市场、实时市场)中的【顶级EI复现】基于主从博弈的售电商多元零售套餐设计与多级市场购电策略(Matlab代码实现)购电组合优化,兼顾成本最小化与收益最大化,并引入不确定性因素(如负荷波动、可再生能源出力变化)进行鲁棒或随机优化处理。文中提供了完整的Matlab仿真代码,涵盖博弈建模、优化求解(可能结合YALMIP+CPLEX/Gurobi等工具)、结果可视化等环节,具有较强的可复现性和工程应用价值。; 适合人群:具备一定电力系统基础知识、博弈论初步认知和Matlab编程能力的研究生、科研人员及电力市场从业人员,尤其适合从事电力市场运营、需求响应、售电策略研究的相关人员。; 使用场景及目标:① 掌握主从博弈在电力市场中的建模方法;② 学习售电商如何设计差异化零售套餐以引导用户用电行为;③ 实现多级市场购电成本与风险的协同优化;④ 借助Matlab代码快速复现顶级EI期刊论文成果,支撑科研项目或实际系统开发。; 阅读建议:建议读者结合提供的网盘资源下载完整代码与案例数据,按照文档目录顺序逐步学习,重点关注博弈模型的数学表达与Matlab实现逻辑,同时尝试对目标函数或约束条件进行扩展改进,以深化理解并提升科研创新能力。
内容概要:本文介绍了基于粒子群优化算法(PSO)的p-Hub选址优化问基于粒子群优化算法的p-Hub选址优化(Matlab代码实现)题的Matlab代码实现,旨在解决物流与交通网络中枢纽节点的最优选址问题。通过构建数学模型,结合粒子群算法的全局寻优能力,优化枢纽位置及分配策略,提升网络传输效率并降低运营成本。文中详细阐述了算法的设计思路、实现步骤以及关键参数设置,并提供了完整的Matlab仿真代码,便于读者复现和进一步改进。该方法适用于复杂的组合优化问题,尤其在大规模网络选址中展现出良好的收敛性和实用性。; 适合人群:具备一定Matlab编程基础,从事物流优化、智能算法研究或交通运输系统设计的研究生、科研人员及工程技术人员;熟悉优化算法基本原理并对实际应用场景感兴趣的从业者。; 使用场景及目标:①应用于物流中心、航空枢纽、快递分拣中心等p-Hub选址问题;②帮助理解粒子群算法在离散优化问题中的编码与迭代机制;③为复杂网络优化提供可扩展的算法框架,支持进一步融合约束条件或改进算法性能。; 阅读建议:建议读者结合文中提供的Matlab代码逐段调试运行,理解算法流程与模型构建逻辑,重点关注粒子编码方式、适应度函数设计及约束处理策略。可尝试替换数据集或引入其他智能算法进行对比实验,以深化对优化效果和算法差异的理解。
<think>我们遇到了一个错误:'Adding a shape from a different container is not supported - create it from scratch with XSLFSheet.create* methods'。 这个错误通常发生在使用Apache POI操作PPTX(XSLF)时,尝试将一个已经在某个幻灯片中的形状(Shape)添加到另一个幻灯片中。在POI中,形状必须属于其创建的幻灯片,不能直接移动到另一个幻灯片。 解决方法: 1. 不要尝试将形状从一个幻灯片移动到另一个幻灯片(例如,通过addShape方法)。相反,在目标幻灯片中重新创建一个相同的形状。 2. 复制原形状的所有属性(如位置、大小、样式、文本等)到新创建的形状。 示例步骤: 假设我们有一个形状`sourceShape`在幻灯片`sourceSlide`上,我们想把它复制到幻灯片`targetSlide`上。 错误做法: ```java targetSlide.addShape(sourceShape); // 会抛出异常 ``` 正确做法: ```java // 1. 在目标幻灯片上创建一个新形状(例如文本框) XSLFTextBox newShape = targetSlide.createTextBox(); // 2. 复制源形状的几何属性 newShape.setAnchor(sourceShape.getAnchor()); // 3. 复制样式(线条、填充等) // 注意:具体样式复制需要根据形状类型逐一设置 // 例如:复制填充颜色 if (sourceShape.getFillColor() != null) { newShape.setFillColor(sourceShape.getFillColor()); } // 4. 复制文本(如果有) if (sourceShape instanceof XSLFTextShape) { XSLFTextShape sourceTextShape = (XSLFTextShape) sourceShape; XSLFTextShape newTextShape = (XSLFTextShape) newShape; // 复制段落和文本运行 for (XSLFTextParagraph sourcePara : sourceTextShape.getTextParagraphs()) { XSLFTextParagraph newPara = newTextShape.addNewTextParagraph(); // 复制段落样式 newPara.setTextAlign(sourcePara.getTextAlign()); // 复制每个文本运行的样式和内容 for (XSLFTextRun sourceRun : sourcePara.getTextRuns()) { XSLFTextRun newRun = newPara.addNewTextRun(); newRun.setText(sourceRun.getRawText()); // 复制文本运行样式 newRun.setFontColor(sourceRun.getFontColor()); newRun.setFontSize(sourceRun.getFontSize()); // ... 其他样式(粗体、斜体等) } } } // 5. 其他属性(如旋转、阴影等)根据需要进行复制 ``` 注意:由于形状类型多样(文本框、图片、图形等),复制时需要根据具体类型处理。 另外,如果多个形状需要复制,可以考虑封装一个复制形状的工具方法。 参考上述思路,即可避免该错误。 然而,如果错误发生在其他操作上(比如复制整个幻灯片),则可能需要使用`XMLSlideShow.createSlide()`方法复制幻灯片,然后调整内容。 如果是从模板幻灯片复制形状,则应该: 1. 获取模板幻灯片(如母版或布局) 2. 在目标幻灯片上创建形状,并从模板形状复制属性。 总之,核心原则是:每个形状都必须通过目标幻灯片的`create*`方法创建,然后再设置属性。 希望以上方法能解决问题! §§相关问题§§ 1. 如何用Apache POI复制整个PPT幻灯片? 2. 在PPT操作中,如何复制一个形状的样式(包括线条、填充、阴影等)? 3. 如何通过POI设置PPT形状的渐变填充效果? 4. POI中如何获取和设置母版幻灯片中的形状? 5. 在使用POI处理PPT时,如何避免内存泄漏? </think>### 解决 "Adding a shape from a different container is not supported" 错误 这个错误在使用 Apache POI 操作 PPT(X) 文件时常见,根本原因是**试图将属于不同幻灯片容器的形状相互转移**。以下是完整的解决方案: #### 错误重现场景示例 ```java // 错误代码示范 XMLSlideShow ppt = new XMLSlideShow(); XSLFSlide slide1 = ppt.createSlide(); XSLFSlide slide2 = ppt.createSlide(); XSLFTextBox shape = slide1.createTextBox(); // 形状属于slide1 slide2.addShape(shape); // 尝试添加到slide2 → 触发错误 ``` #### 正确解决方案 1. **在目标幻灯片中新建形状** 使用目标幻灯片的 `create*` 方法创建新形状 ```java // 正确做法 XSLFTextBox newShape = slide2.createTextBox(); // 在目标容器创建 ``` 2. **复制原形状的所有属性** ```java // 复制几何属性 newShape.setAnchor(shape.getAnchor()); // 复制样式属性 newShape.setFillColor(shape.getFillColor()); newShape.setLineWidth(shape.getLineWidth()); newShape.setRotation(shape.getRotation()); ``` 3. **深度复制文本内容(关键步骤)** ```java // 复制段落和文本格式 for (XSLFTextParagraph srcPara : shape.getTextParagraphs()) { XSLFTextParagraph newPara = newShape.addNewTextParagraph(); newPara.setTextAlign(srcPara.getTextAlign()); // 段落对齐 for (XSLFTextRun srcRun : srcPara.getTextRuns()) { XSLFTextRun newRun = newPara.addNewTextRun(); newRun.setText(srcRun.getRawText()); // 文本内容 newRun.setFontColor(srcRun.getFontColor()); // 字体颜色 newRun.setFontSize(srcRun.getFontSize()); // 字号 // 其他样式... } } ``` 4. **复制连接关系(如超链接)** ```java if (shape.getTextParagraphs().get(0).getTextRuns().get(0).getHyperlink() != null) { newShape.getTextParagraphs().get(0).getTextRuns().get(0) .setHyperlink(shape.getTextParagraphs().get(0).getTextRuns().get(0).getHyperlink()); } ``` #### 根本原因分析 POI 的 `XSLFShape` 对象与其父容器(`XSLFSheet`)存在**强绑定关系**: 1. 每个形状在创建时都会注册到父容器 2. 尝试跨容器移动会破坏 PPTX 的 XML 结构 3. POI 的底层 XML 模型不支持节点跨文档迁移[^1] #### 最佳实践建议 1. **封装复制工具方法** ```java public static XSLFTextBox cloneTextBox(XSLFSlide targetSlide, XSLFTextBox source) { XSLFTextBox clone = targetSlide.createTextBox(); // ...完整复制逻辑 return clone; } ``` 2. **使用模板系统** ```java // 预定义模板幻灯片 XSLFSlide templateSlide = ppt.getSlides().get(0); // 在新幻灯片克隆模板内容 XSLFSlide newSlide = ppt.createSlide(); for (XSLFShape shape : templateSlide.getShapes()) { cloneShape(newSlide, shape); // 调用克隆方法 } ``` 3. **批量处理原则** ```java // 正确:在新容器循环创建 for (XSLFShape shape : sourceSlide.getShapes()) { targetSlide.create* // 根据类型调用create方法 } ``` > ⚠️ **重要提醒**:该规则适用于所有形状类型(文本框/图片/图表等),POI 5.2.3+ 版本会严格校验容器归属[^1]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值