4

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

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

private function GetDebtors_Result(event:ResultEvent):void
{
var arrayCol:Array = new Array();
var xmlSrc:XML = new XML("<main></main>");
var xmlTmp:XML;
var colClientname:DataGridColumn;

//Build an XML from DB data received (could as well use "event.result" directly to act as dataprovider for the datagrid, but I needed to break it down here)
for each(var o:Object in event.result)
{
xmlTmp = <row>
<CLIENTNAME>{o.CLIENTNAME}</CLIENTNAME>
</row>;
xmlSrc.appendChild(xmlTmp);
}

//Create the column CLIENTNAME
colClientname = new DataGridColumn("CLIENTNAME");
colClientname.headerText = "Client Name";

//Add the newly created column in the "Column" array.
arrayCol.push(colClientname);

//Use the "Column" array to set the columns of the datagrid.  
dgSearch.columns = arrayCol;

//Populate the datagrid with the XML data.
dgSearch.dataProvider = xmlSrc.row;
}

这很好用。

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

private function GetDebtors_Result(event:ResultEvent):void
{
var arrayCol:Array = new Array();
var xmlSrc:XML = new XML("<main></main>");
var xmlTmp:XML;
var colClientname:DataGridColumn;
var colSel:DataGridColumn; // **ADDED**

//Build an XML from DB data received (could as well use "event.result" directly to act as dataprovider for the datagrid, but I needed to break it down here)
for each(var o:Object in event.result)
{
xmlTmp = <row>
<CLIENTNAME>{o.CLIENTNAME}</CLIENTNAME>
<SELECTED>{(o.SELECTED == 1)?true:false}</SELECTED>  //**ADDED**
</row>;
xmlSrc.appendChild(xmlTmp);
}

//Create the column CLIENTNAME
colClientname = new DataGridColumn("CLIENTNAME");
colClientname.headerText = "Client Name";

//Create the column SELECTED
colSel = new DataGridColumn("SELECTED"); // **ADDED**
colSel.headerText = ""; // **ADDED**
colSel.itemRenderer = new ClassFactory(mx.controls.CheckBox); // **ADDED**
colSel.dataField = "SELECTED"; // **ADDED**

//Add the newly created column in the "Column" array.
arrayCol.push(colClientname);

//Add the "selection" column in the "Column" array.
arrayCol.push(colSel); // **ADDED**

//Use the "Column" array to set the columns of the datagrid.  
dgSearch.columns = arrayCol;

//Populate the datagrid with the XML data.
dgSearch.dataProvider = xmlSrc.row;

}

问题#1:出现复选框列,我可以选中和取消选中复选框,但在加载时它们没有被选中/取消选中与数据库数据相关的复选框。

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

有人得到解决方案吗?先感谢您。

4

2 回答 2

1

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

在向列添加复选框时 - 只需第一次实例化它:

var chkTempCheck: Checkbox = new CheckBox();

然后设置所有需要的属性:

chkTempCheck.selected = o.dBColumnToDecideCheckUnCheck

这里的 'o' 是您在 event.result 中使用的对象。这肯定会奏效!

于 2014-03-18T11:18:26.150 回答
0

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

于 2013-01-13T11:36:30.770 回答