如何获取DataGrid中的文本框中的值

艾思软件-app开发公司 2010-02-02 10:55:47
DataGrid有一列是要用户勾选复选框前输入数字.可是我不知道如何获取勾选行内对应的文本框里的值.
麻烦高手指点一下....
代码如下



<?xml version="1.0"?>
<!-- controls\bar\TBarEvent.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

<mx:Script>
<![CDATA[

import mx.events.*;
import mx.collections.ArrayCollection;

[Bindable]
private var STATE_ARRAY:ArrayCollection = new ArrayCollection([
{label:"Alabama", data:"Montgomery"},
{label:"Alaska", data:"Juneau"},
{label:"Arkansas", data:"LittleRock"}
]);

public function checkbox_click(event:Object):void
{
//这里获取选中行 id="txt" 文本框里的值

}
]]>
</mx:Script>
<mx:DataGrid dataProvider="{STATE_ARRAY}">
<mx:columns>
<mx:DataGridColumn headerText="操作">
<mx:itemRenderer>
<mx:Component>
<mx:HBox>
<mx:CheckBox id="chkBox" click="outerDocument.checkbox_click(this)"/>
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn headerText="输入" width="260">
<mx:itemRenderer>
<mx:Component>
<mx:HBox>
<mx:TextInput id="txt" />
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn headerText="Column 1" dataField="label"/>
<mx:DataGridColumn headerText="Column 2" dataField="data"/>
</mx:columns>
</mx:DataGrid>

</mx:Application>


...全文
385 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
哦,明白了.谢谢,结帐
syeia 2010-02-03
  • 打赏
  • 举报
回复
<mx:Box xmlns:mx="http://www.adobe.com/2006/mxml" horizontalAlign="center" verticalAlign="middle">
<mx:CheckBox id="checkBox" selected="{data.selected}"
click="data.selected = !data.selected; checkBox.selected = data.selected" doubleClick="event.stopPropagation()"
visible="{!Boolean(data.disVisible)}" enabled="{!data.disabled}"/>
</mx:Box>


想放什么,在上面的文件中修改就可以了,这和你
<mx:DataGridColumn headerText="操作">
<mx:itemRenderer>
<mx:Component>
<mx:HBox>
<mx:CheckBox id="chkBox" click="outerDocument.checkbox_click(this)"/>
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>

没有什么不同.
  • 打赏
  • 举报
回复
楼上的方法很好,可是我要的是文本框,不是复选框....


如果我要在datagrid单元格里放到日期控件怎么搞?


放心,分是少了不大家的.我的结贴率是100%.
  • 打赏
  • 举报
回复
很感谢两位回答,我大概明白你们的意思,可是具体我不会写,能不能按你们的方法帮我改一下,我的程序.
xuetao121 2010-02-02
  • 打赏
  • 举报
回复
很奇怪你这种用法,直接使用可编辑grid就可以了啊。功能上不足。就从写组件就可以了
你这样很不利于控制,重用性也没有。也不可扩展。
herowach 2010-02-02
  • 打赏
  • 举报
回复
不得不说一下,你这种用法很怪,如果是需要编辑普通文本,直接用itemEditor就可以了,控件会自动给你绑定,
按照你的做法,去文本框中的值如下:
<?xml version="1.0"?>
<!-- controls\bar\TBarEvent.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

<mx:Script>
<![CDATA[
import mx.controls.listClasses.IListItemRenderer;
import mx.controls.Alert;

import mx.events.*;
import mx.collections.ArrayCollection;

[Bindable]
private var STATE_ARRAY:ArrayCollection = new ArrayCollection([
{label:"Alabama", data:"Montgomery"},
{label:"Alaska", data:"Juneau"},
{label:"Arkansas", data:"LittleRock"}
]);

public function checkbox_click(renderer:IListItemRenderer):void
{
Alert.show(STATE_ARRAY.getItemAt(dg.itemRendererToIndex(renderer)).label);

}
]]>
</mx:Script>
<mx:DataGrid id="dg" dataProvider="{STATE_ARRAY}">
<mx:columns>
<mx:DataGridColumn headerText="操作">
<mx:itemRenderer>
<mx:Component>
<mx:HBox>
<mx:CheckBox id="chkBox" click="outerDocument.checkbox_click(this)"/>
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn headerText="输入" width="260">
<mx:itemRenderer>
<mx:Component>
<mx:HBox>
<mx:TextInput id="txt" text="{data.label}" change="data.label = txt.text" />
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn headerText="Column 1" dataField="label"/>
<mx:DataGridColumn headerText="Column 2" dataField="data"/>
</mx:columns>
</mx:DataGrid>

</mx:Application>
xuetao121 2010-02-02
  • 打赏
  • 举报
回复
花了点时间给你。首先是组件,目录是,“/工程/src/rightMenu/ui/common”,自己替换

<?xml version="1.0" encoding="utf-8"?>
<!--
* Copyright (c) 2008,2009 Tec Accounting & Consulting LTD. All rights are reserved.
* LICENSE INFORMATION
*
* grid中的checkbox控件 使用的mxml文件
*
* @author xuetao
* @version Ver 1.0 2010-02-02 初版
*
-->
<mx:Box xmlns:mx="http://www.adobe.com/2006/mxml" horizontalAlign="center" verticalAlign="middle">
<mx:CheckBox id="checkBox" selected="{data.selected}"
click="data.selected = !data.selected; checkBox.selected = data.selected" doubleClick="event.stopPropagation()"
visible="{!Boolean(data.disVisible)}" enabled="{!data.disabled}"/>
</mx:Box>

如下。给你mxml,注意这个部分,itemRenderer="rightMenu.ui.common.CheckBoxItemRenderer" ,路径自己修改为src下开始的包名。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" creationComplete="fn_init()">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;

[Bindable]
public var gridStore:ArrayCollection = new ArrayCollection();

public function fn_init():void{
gridStore = new ArrayCollection([
{"":"","nameValue":"Montgomery"},
{"":"","nameValue":"Juneau"},
{"":"","nameValue":"LittleRock"}
]);

}
public function chooseValue():void{
var list:ArrayCollection = new ArrayCollection();

//循环取选中的数据,放入LIST
for(var i:int=0;i<dataGrid.dataProvider.length;i++){
if(dataGrid.dataProvider[i].selected){
Alert.show(dataGrid.dataProvider[i].nameValue);
list.addItem(dataGrid.dataProvider[i]);
}
}
if(list.length <= 0 ){
Alert.show("没有选择数据");
}
}
]]>
</mx:Script>
<mx:Panel id="panel" label="测试页面" width="100%" height="100%" paddingLeft="3" paddingRight="3" paddingTop="3">
<mx:Button id="btn" click="chooseValue()" label="click"/>
<mx:DataGrid id="dataGrid" dataProvider="{gridStore}" width="100%" height="100%" horizontalScrollPolicy="on" textAlign="left" verticalScrollPolicy="on" >
<mx:columns>
<mx:DataGridColumn id="isSelect" resizable="false" width="30" itemRenderer="rightMenu.ui.common.CheckBoxItemRenderer" textAlign="center"/>
<!--name-->
<mx:DataGridColumn id="nameValue" headerText="name" width="100" dataField="nameValue"/>
</mx:columns>
</mx:DataGrid>
</mx:Panel>
</mx:Application>

运行结果正常。同时check组件增加了很多功能,包括单击,双击,隐藏。呵呵自己试试吧。路径应该不是大问题吧。自己玩。用的好,痛快的给哥多点分。累死了
syeia 2010-02-02
  • 打赏
  • 举报
回复
你可以不点击,就可以输入.

可以绑定一个ArrayCollection,里面有一条空的数据,然后一行输入完后, 绑定对象就增加一行空值.
  • 打赏
  • 举报
回复
editable="true" 这种方式, 文本框的效果没有,而且只有点击那个单元格才会有输入效果.而且也不是文本框效果
水中影子 2010-02-02
  • 打赏
  • 举报
回复
syeia 2010-02-02
  • 打赏
  • 举报
回复
就是你里面不用TextInput ,直接把grid 设置成可编辑的,这样单元格就可以编辑了,
编辑完了, 数据自然就在dataProvider 中.

<mx:DataGrid editable="true"
<mx:DataGrid id="dg" editable="true" dataProvider="{STATE_ARRAY}">
<mx:columns>
<mx:DataGridColumn headerText="操作">
<mx:itemRenderer>
<mx:Component>
<mx:HBox>
<mx:CheckBox id="chkBox" click="outerDocument.checkbox_click(this)"/>
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn headerText="输入" width="260" dataField="">
</mx:DataGridColumn>
<mx:DataGridColumn headerText="Column 1" dataField="label"/>
<mx:DataGridColumn headerText="Column 2" dataField="data"/>
</mx:columns>
</mx:DataGrid>
  • 打赏
  • 举报
回复
顶起

4,328

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计 Flex
社区管理员
  • Flex
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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