Статьи

Совет: Использование Datagrid с XML

Я собираюсь продемонстрировать, как использовать компонент datagrid с xml-файлом. Когда вам нужно отобразить табличные данные, нет более быстрого и простого способа, чем использовать сетку данных, и в сочетании с файлом XML это делает все лучше.


Создайте новый флэш-файл (Actionscript 3.0). Установите документ на 600x400px с белым фоном.

Сохраните этот файл с именем xmlDatagrid.fla


Откройте окно компонентов, перейдя в Меню> Окно> Компоненты или нажав Ctrl + F7.

Перетащите кнопку, комбинированный список и компонент сетки данных на сцену.

Затем удалите кнопку, комбобокс и компоненты сетки данных со сцены; теперь они в вашей библиотеке.

Вот предварительный просмотр структуры документа xml, которую мы будем использовать:

01
02
03
04
05
06
07
08
09
10
11
12
13
<?xml version=»1.0″?>
<books>
    <book>
        <title>Learning ActionScript 3.0: A Beginner’s Guide</title>
        <instock>yes</instock>
        <price>26.39</price>
    </book>
    <book>
        <title>Essential ActionScript 3.0</title>
        <instock>yes</instock>
        <price>34.64</price>
    </book>
</books>

Загрузка исходного кода содержит три файла XML: flash.xml , ajax.xml и php.xml ; каждый из них имеет ту же структуру, что и фрагмент выше, но содержит разные книги. Вам нужно будет поместить их в ту же папку, что и ваш FLA.


Откройте новый файл ActionScript и сохраните его с именем XMLDataGrid.as.

Теперь откройте объявление пакета и импортируйте классы, которые мы будем использовать:

1
2
3
4
5
6
7
8
9
package {
    import flash.display.MovieClip;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.events.MouseEvent;
    import flash.events.Event;
    import fl.controls.DataGrid;
    import fl.controls.ComboBox;
    import fl.controls.Button;

Основной класс документа должен расширять либо класс Sprite, либо класс MovieClip; здесь мы расширяем класс MovieClip. Объявите переменные, которые мы будем использовать:

1
2
3
4
5
6
7
package {
    public class XMLDataGrid extends MovieClip {
        var dg:DataGrid;
        var cb:ComboBox;
        var urlLoader:URLLoader = new URLLoader();
        var loadButton:Button;
        var bookXML:XML;

Здесь мы установили конструктор с тремя функциями, которые мы будем использовать:

1
2
3
4
5
public function XMLDataGrid():void {
        setupGrid();
        setupComboBox();
        setupButton();
}

Здесь мы определяем функции, которые мы используем в конструкторе:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
private function setupGrid():void {
    dg=new DataGrid();
 
    dg.addColumn(«Title»);
    dg.addColumn(«InStock»);
    dg.addColumn(«Price»);
    //This sets the size of the datagrid
    dg.setSize(600,100);
    //This is how many rows you want the datagrid to show
    dg.rowCount=5;
    //When we add colums they are put into an array
    //Here we set the first column «Title» width to 450
    dg.columns[0].width=450;
     
    //This set the x and y position of the datagrid
    dg.move(0,100);
 
    addChild(dg);
}
 
private function setupComboBox():void {
    cb = new ComboBox();
    //This adds item to the comboBox
    cb.addItem({label: «Flash» });
    cb.addItem({label: «Ajax» });
    cb.addItem({label: «Php» });
    //This sets the x and y positions
    cb.move(200,50);
 
    addChild(cb);
}
 
private function setupButton():void {
    loadButton = new Button();
    loadButton.label = «Load Books»;
    loadButton.addEventListener(MouseEvent.CLICK, loadBooks);
    loadButton.x = 200;
    loadButton.y = 325;
    addChild(loadButton);
}

Функция setupGrid() создает компонент DataGrid , который будет отображать данные из файла XML, который мы передаем ему.

Функция setupComboBox() создает ComboBox , который представляет собой раскрывающийся список, который мы будем использовать, чтобы позволить пользователю выбрать файл XML для передачи в сетку данных.

Кнопка, созданная в setupButton() будет использоваться для передачи файла XML, выбранного в поле со списком, в сетку данных. Мы напишем этот код дальше.


Функция loadBooks используется в eventListener loadButton.

1
2
3
4
5
6
private function loadBooks(e:Event):void {
    //Here the cb.selectedLabel returns a string so we call toLowerCase() on it
    //and append .xml to it ie if ‘Flash’ is selected we load ‘flash.xml’
    urlLoader.load(new URLRequest(cb.selectedLabel.toLowerCase()+».xml»));
    urlLoader.addEventListener(Event.COMPLETE, populateGrid);
}

Функция populateGrid используется в eventListener urlLoader в функции loadBooks.

01
02
03
04
05
06
07
08
09
10
11
12
13
    private function populateGrid(e:Event):void {
        var booksXML:XML = new XML( e.target.data);
        //How many items are in the xml file
        var booksLength:int = booksXML.book.length();
         
        //This removes all the previously added data in the datagrid.
        dg.removeAll();
        //Here we loop through the <book> nodes in the xml file, and add each as a row to the datagrid
        for (var i:int =0; i &lt; booksLength; i++) {
            dg.addItem({Title: booksXML.book[i].title, InStock: booksXML.book[i].instock,Price: booksXML.book[i].price});
        }
    } //Close out the class
} // This is closing the package out

Установите класс документа в «XMLDataGrid» и протестируйте фильм!


Здесь мы узнали, что отображение табуларных данных во флэш-памяти упрощается с помощью компонента datagrid, и что их сопряжение с xml является отличным решением.

Это мой первый урок, надеюсь, вы узнали что-то полезное и спасибо за чтение!