4

mxml ファイルにデータグリッド コントロールがあります。

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;
}

これはうまくいきます。

ここで問題が発生します。チェックボックスを含む 2 番目の列を追加する必要があります。これらは、データベースからのデータに応じて選択または選択解除されます。上記と同じ「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: 新しいデータを DB に保存できるように 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 でグリッドを作成するときに列幅が同じになることはありませんでした。そこで、DB データを取得した直後に、AS ファイルに列を設定しようと試みました。そのような状況で自分自身を見つけることができることを願っています. 助けてくれてありがとう。

于 2013-01-13T11:36:30.770 に答える