![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Nov 2006
Сообщений: 76
|
Делаю в DataGrid itemRenderer CheckBox. Он выравнивается влево. Надо посерёдке. textAlign="center" в колонке не работает. Что делать?
|
|
|||||
|
Делать его в контейнере и контейнеру указывать horizontalAlign="center"
|
|
|||||
|
Регистрация: Nov 2006
Сообщений: 76
|
Сделал ChB.mxml:
<?xml version="1.0" encoding="windows-1251"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" horizontalAlign="center">
<mx:CheckBox id="ch" selected="{selected}"/>
<mx:Script>
<![CDATA[
[Bindable]
public var selected:Boolean;
]]>
</mx:Script>
</mx:VBox>
c=new DataGridColumn();
c.dataField=a.name;
c.itemRenderer=new ClassFactory(ChB);
c.editorDataField="selected";
c.setStyle("textAlign","center"); //для заголовка
columns.push(c);
Если c.itemRenderer=new ClassFactory(CheckBox), то работает. |
|
|||||
|
Flash Aксакал
Регистрация: Jun 2005
Сообщений: 636
|
Потому что CheckBox реализует интерфейс IDataRenderer и как любой дата рендерер при изменении свойства data соответсвенно реагирует. У вас же этой реакции нету...
|
|
|||||
|
Регистрация: Nov 2006
Сообщений: 76
|
Поскольку в data хранится вся строка таблицы, ваш вариант не сработает. Обратиться к конкретному полю (типа data.main) я не могу, т.к. логических полей несколько. Соответственно, как узнать, какое поле или DataGridColumn обрабатывается?
|
|
|||||
|
Смотрите свойство listData, в нем содержится dataField - таким образом можно узнать используемое поле. Если хотите колонку, то в listData есть columnIndex и используя owner'a легко вытащить колонку - но это неправильный с точки зрения архитектуры вариант. А вообще, эта ин-ция хорошо расписана в хелпе.
|
|
|||||
|
Flash Aксакал
Регистрация: Jun 2005
Сообщений: 636
|
Ну во первых почитать хелп (например тут), на тему ItemRenderer'ов.
Или по смотреть класс Button (CheckBox наследует от Button). в итоге: file test_dg.mxml <?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:DataGrid width="300" height="300"
verticalCenter="0" horizontalCenter="0" dataProvider="{dp}">
<mx:columns>
<mx:DataGridColumn dataField="firstName" />
<mx:DataGridColumn dataField="lastName" />
<mx:DataGridColumn dataField="alive" itemRenderer="TestRenderer"/>
</mx:columns>
</mx:DataGrid>
<mx:Script>
<![CDATA[
import mx.controls.CheckBox;
import mx.collections.ArrayCollection;
private var _dp:ArrayCollection = null;
public function get dp ():ArrayCollection {
if (_dp == null) {
_dp = new ArrayCollection ();
var l:int = Math.round (Math.random () * 100);
var i:int;
for (i = 0; i < l; i++) {
_dp.addItem (
{
firstName: 'Vasya' + i,
lastName: 'Pupkin',
alive: (Math.round (Math.random () * 15) % 4 == 0)
});
} // end for
} // end if
return _dp;
}
]]>
</mx:Script>
</mx:Application>
file TestRenderer.mxml <?xml version="1.0" encoding="utf-8"?>
<mx:Canvas
xmlns:mx="http://www.adobe.com/2006/mxml"
width="100%" height="20"
implements="mx.controls.listClasses.IDropInListItemRenderer">
<mx:CheckBox verticalCenter="0" horizontalCenter="0"
selected="{data [DataGridListData (listData).dataField]}"/>
<mx:Script>
<![CDATA[
import mx.controls.listClasses.BaseListData;
import mx.controls.DataGrid;
import mx.controls.dataGridClasses.DataGridListData;
private var _listData:BaseListData = null;
[Bindable(event="dataChange")]
public function get listData():BaseListData { return _listData; }
public function set listData (value:BaseListData):void {
_listData = value;
}
]]>
</mx:Script>
</mx:Canvas>
|
|
|||||
|
Регистрация: Nov 2006
Сообщений: 76
|
Спасибо, товарищи!
ЗЫ Столько писанины, чтобы просто выровнять контрол - архитектура хромает. |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:07. |
|
|
« Предыдущая тема | Следующая тема » |
|
|