Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex Flex 3:在datagrid中动态创建复选框列-数据填充问题和事件侦听器_Apache Flex - Fatal编程技术网

Apache flex Flex 3:在datagrid中动态创建复选框列-数据填充问题和事件侦听器

Apache flex Flex 3:在datagrid中动态创建复选框列-数据填充问题和事件侦听器,apache-flex,Apache Flex,我的mxml文件中有一个datagrid控件: 现在在我的AS文件中,在从DB获取数据时的result函数中,我可以动态创建列。假设我创建了一列(客户端名称): 私有函数GetDebtors\u结果(事件:ResultEvent):无效 { var arrayCol:Array=new Array(); var xmlSrc:XML=newxml(“”); var-xmlTmp:XML; var colClientname:DataGridColumn; //从收到的DB数据构建XML(也可以

我的mxml文件中有一个datagrid控件:

现在在我的AS文件中,在从DB获取数据时的result函数中,我可以动态创建列。假设我创建了一列(客户端名称):

私有函数GetDebtors\u结果(事件:ResultEvent):无效
{
var arrayCol:Array=new Array();
var xmlSrc:XML=newxml(“”);
var-xmlTmp:XML;
var colClientname:DataGridColumn;
//从收到的DB数据构建XML(也可以直接使用“event.result”作为datagrid的数据提供者,但我需要在这里对其进行分解)
对于每个(变量o:event.result中的对象)
{
xmlTmp=
{o.CLIENTNAME}
;
xmlSrc.appendChild(xmlTmp);
}
//创建列CLIENTNAME
colClientname=newdatagridcolumn(“CLIENTNAME”);
colClientname.headerText=“客户端名称”;
//在“column”数组中添加新创建的列。
arrayCol.push(colClientname);
//使用“列”数组设置datagrid的列。
dgSearch.columns=arrayCol;
//用XML数据填充datagrid。
dgSearch.dataProvider=xmlSrc.row;
}
这很有效

现在问题来了:我需要添加第二列,其中包含复选框。它们将根据数据库中的数据进行选择或取消选择。我将通过更新与上述相同的“GetDebtors_Result”函数(添加的行注释为“/添加的“/”)来展示我是如何完成这项工作的:

私有函数GetDebtors\u结果(事件:ResultEvent):无效
{
var arrayCol:Array=new Array();
var xmlSrc:XML=newxml(“”);
var-xmlTmp:XML;
var colClientname:DataGridColumn;
var colSel:DataGridColumn;//**已添加**
//从收到的DB数据构建XML(也可以直接使用“event.result”作为datagrid的数据提供者,但我需要在这里对其进行分解)
对于每个(变量o:event.result中的对象)
{
xmlTmp=
{o.CLIENTNAME}
{(o.SELECTED==1)?真:假}/**已添加**
;
xmlSrc.appendChild(xmlTmp);
}
//创建列CLIENTNAME
colClientname=newdatagridcolumn(“CLIENTNAME”);
colClientname.headerText=“客户端名称”;
//创建选定的列
colSel=新的DataGridColumn(“选定”);//**已添加**
colSel.headerText=“”;//**已添加**
colSel.itemRenderer=新类工厂(mx.controls.CheckBox);//**已添加**
colSel.dataField=“已选定”//**已添加**
//在“column”数组中添加新创建的列。
arrayCol.push(colClientname);
//在“列”数组中添加“选择”列。
arrayCol.push(colSel);//**已添加**
//使用“列”数组设置datagrid的列。
dgSearch.columns=arrayCol;
//用XML数据填充datagrid。
dgSearch.dataProvider=xmlSrc.row;
}

问题#1:出现复选框列,我可以勾选和取消勾选复选框,但它们在加载时未针对DB数据进行勾选/取消勾选

问题#2:如何将一个函数与复选框关联,例如一个将更新XML以便将新数据保存到DB的函数


有人知道答案吗?先谢谢你

最初的场景是:所有列都在mxml文件中定义。复选框列使用了itemrenderer,并且工作正常。我在3种不同的情况下使用了相同的datagrid,唯一的问题是一些列根据“视图”设置为可见/不可见。问题是,当移动“视图”并填充网格并再次移动“视图”时,列宽一直呈指数增长。我排除了复选框列,一切正常;列宽还可以。我包含了复选框列,并尝试在AS文件中设置列宽,列呈指数增长的问题得到了解决,但在视图A中填充网格和在视图B中填充网格时列宽从来都不相同……因此,在获取DB数据后,我冒险尝试在AS文件中设置列。希望你能在这些情况下找到自己。谢谢你的帮助。

似乎是我今天看到的一个非常古老的问题。 希望您现在已经找到了解决方案,以防有人遇到同样的问题:

在向列添加复选框时-只需首先实例化它:

var chkTempCheck: Checkbox = new CheckBox();
然后设置所需的所有属性:

chkTempCheck.selected = o.dBColumnToDecideCheckUnCheck
这里的“o”是您从event.result使用的对象。
这肯定会有用的

为什么不在MXML中描述DataGrid定义部分中的所有列?我会这样做,然后我会定义一些ItemRenders来正确显示数据库内容。结果是否总是不同的,每次都必须从头开始构建DataGrid?如果我不理解你的问题,请详细解释。
var chkTempCheck: Checkbox = new CheckBox();
chkTempCheck.selected = o.dBColumnToDecideCheckUnCheck