我的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:出现复选框列,我可以选中并取消选中复选框,但加载时不会对DB数据进行选中/取消选中。
问题2:如何将一个函数与复选框相关联,例如一个将更新XML以便我可以将新数据保存到数据库的复选框?
有人得到了解决方案吗?先感谢您。
答案 0 :(得分:1)
似乎是我今天看到的一个非常古老的问题。 希望你现在能找到解决方案,只要有人遇到同样的问题:
向列中添加复选框时 - 只需将其实例化为1st:
var chkTempCheck: Checkbox = new CheckBox();
然后设置所需的所有属性:
chkTempCheck.selected = o.dBColumnToDecideCheckUnCheck
这里'o'是你在event.result中使用的对象。 这肯定会有效!
答案 1 :(得分:0)
初始方案是:所有列都在mxml文件中定义。复选框列使用了itemrenderer并且工作正常。我在3种不同的情况下使用相同的数据网格 - 只是根据“视图”,某些列被设置为可见/不可见。问题是当移动“视图”并填充网格并再次移动“视图”时,列宽度呈指数级增长。我排除了复选框列,一切正常;列宽度还可以。我在后面包含了复选框列,并尝试在AS文件中设置列宽,并且列增加指数问题已修复,但在视图A中填充网格时以及在视图B中填充网格时,列宽从不相同。所以我冒险尝试在获取DB数据后立即在AS文件中设置列。希望你能在这些情况下找到自己。谢谢你的帮助。