我有一个带有自定义itemRenderer的dataGrid。每次我在dataGrid上至少选择两次时,我选中的单元格下面的单元格就会被选中。如果我取消注释方法saveBackDataGridContent()!
中的代码,则不会发生这种情况第二个问题是,如果Line比输入的文本短,则horizontalScrollBar将变为活动状态,虽然我设置了setStyle(“horizontalScrollPolicy”,“off”); ...(更新:此问题已解决,请参阅下文!)
谁可以解决那个?
CustomRenderer.mxml:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" initialize="dataService.send()">
<mx:Script>
<![CDATA[
import components.ChoiceRenderer;
import mx.rpc.events.ResultEvent;
import mx.events.DataGridEvent;
private function resultHandler(event:ResultEvent):void {
var doc:XML = event.result as XML;
testGrid.dataProvider = doc.Records.BackSide;
}
private function saveBackDataGridContent(event:DataGridEvent):void{
testGrid.dataProvider[event.rowIndex].TextElement = event.currentTarget.itemEditorInstance.text;
}
]]>
</mx:Script>
<mx:HTTPService id="dataService" result="resultHandler(event)" url = "data/example.xml" resultFormat="e4x"/>
<mx:DataGrid id="testGrid" editable="true" itemEditEnd="saveBackDataGridContent(event)">
<mx:columns>
<mx:DataGridColumn itemRenderer="components.ChoiceRenderer" width="230"/>
</mx:columns>
</mx:DataGrid>
</mx:Application>
ChoiceRenderer.as
package components
{
import mx.containers.HBox;
import mx.controls.CheckBox;
import mx.controls.Label;
public class ChoiceRenderer extends HBox
{
private var correctAnswer:CheckBox;
private var choiceLabel:Label;
public function ChoiceRenderer()
{
super();
setStyle("horizontalScrollPolicy", "off");
correctAnswer = new CheckBox;
addChild(correctAnswer);
choiceLabel = new Label;
addChild(choiceLabel);
}
override public function set data(xmldata:Object):void{
if(xmldata.name() == "BackSide"){
super.data = xmldata.TextElement[0];
choiceLabel.text = xmldata.TextElement[0].toString();
}
}
}
}
的example.xml
<TopContainer>
<Records>
<BackSide>
<TextElement>first</TextElement>
</BackSide>
<BackSide>
<TextElement>second</TextElement>
</BackSide>
<BackSide>
<TextElement>third</TextElement>
</BackSide>
<BackSide>
<TextElement>fourth</TextElement>
</BackSide>
<BackSide>
<TextElement>fifth</TextElement>
</BackSide>
<BackSide>
<TextElement>sixth</TextElement>
</BackSide>
</Records>
</TopContainer>
我无法相信,这个问题是如此重要,但到目前为止我还没有找到任何解决方案......这不是我要做的标准功能吗?
由于 马库斯
答案 0 :(得分:2)
你的冒充问题相当庞大,但有些指针可能会给你带来麻烦。
ItemRenderers被回收。这可能是您的问题之一,您需要确保itemRenderer中的任何if语句也有一个else语句(这会将其设置回默认状态)。使用渲染器时,这是一个常见的陷阱。
此行setStyle("horizontalScrollPolicy", "off");
无效,因为horizontalScrollPolicy是属性,而不是样式。
修复这些情况,然后查看您的位置。
另请阅读本文:
http://www.adobe.com/devnet/flex/articles/itemrenderers_pt1.html
这一个:
http://www.adobe.com/devnet/flex/articles/itemrenderers_pt2.html
他们帮助我了解项目渲染器及其许多怪癖。