Проблема с связью сетки данных с вводом текста - PullRequest
0 голосов
/ 10 августа 2010

Я пытаюсь сделать так, чтобы пользователь вводил свои данные в несколько текстовых полей, а затем после ввода данных они отображаются в таблице данных во время выполнения. Проблема в том, что когда я запускаю приложение, я нажимаю кнопку, но введенная информация не добавляется в сетку данных. Мои текстовые поля также должны очищаться после нажатия кнопки, но опять ничего не происходит. Вот мой код:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
    <![CDATA[

     import mx.collections.ArrayCollection;

     [Bindable]private var dgItems:ArrayCollection;
     [Bindable]public var temp:Object;


     public function addItem(evt:Event):void {
     //add item if the text input fields are not empty
      if(name_input.text != ""&& location_input.text !="") {
     //create a temporary Object
      temp = myDG.selectedItem;
      var temp:Object = new Object();
     //add the text from the textfields to the object
      temp = {name:name_input.text, location:location_input.text};

     //this will add the object to the ArrayColldection (wich is binded with the DataGrid)
      dgItems.addItem(temp);
     //clear the input fields
      name_input.text = "";
       location_input.text ="";
      }
     }
    ]]>
   </mx:Script>

 <mx:DataGrid  x="97" y="110"  dataProvider="{dgItems}" id="myDG">
  <mx:columns>
   <mx:DataGridColumn headerText="Column 1" dataField="name:"/>
   <mx:DataGridColumn headerText="Column 2" dataField="location:"/>

  </mx:columns>
 </mx:DataGrid>
 <mx:Button x="97" y="51" label="add" click="addItem(event)"/>
 <mx:TextInput x="117" y="300" id="location_input"/>
 <mx:TextInput x="117" y="340" id="name_input"/>
</mx:Application>

Любая помощь очень ценится.

1 Ответ

1 голос
/ 10 августа 2010

В вашем коде много ошибок.Во-первых, вы не инициализировали коллекцию массивов dgItems, поэтому ее значение было нулевым.Вы получите ошибки при попытке добавить addItem к пустому объекту.

Во-вторых, вы пытались получить доступ к selectedItem объекта dataGrid перед инициализацией объекта DataGrid ArrayCollection dataProvider.Нет элементов в списке, не может быть никакого выбранного элемента.

В-третьих, вы создаете новый объект дважды;один раз со строкой 'new Object' и снова со встроенным синтаксисом для определения объектов: '{}

В-четвертых, свойства поля данных в DataGridColumn имели двоеточия, но свойства объекта - нет.

Надеюсь, это поможет.

    <?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
        <![CDATA[

            import mx.collections.ArrayCollection;

            // array collection was never initialized; you can't items to a null object 
            [Bindable]private var dgItems:ArrayCollection = new ArrayCollection();
// not needed
//          [Bindable]public var temp:Object;


            public function addItem(evt:Event):void {
                //add item if the text input fields are not empty
                if(name_input.text != ""&& location_input.text !="") {
                    //create a temporary Object
                    // this line of code serves no purpos
                    //                  temp = myDG.selectedItem;
                    var temp:Object // = new Object();
                    //add the text from the textfields to the object
                    temp = {name:name_input.text, location:location_input.text};

                    //this will add the object to the ArrayColldection (wich is binded with the DataGrid)
                    dgItems.addItem(temp);
                    //clear the input fields
                    name_input.text = "";
                    location_input.text ="";
                }
            }
        ]]>
    </mx:Script>

    <mx:DataGrid  x="97" y="110"  dataProvider="{dgItems}" id="myDG">
        <mx:columns>
            <!-- need to remove the colons from the data field -->
            <mx:DataGridColumn headerText="Column 1" dataField="name"/>
            <mx:DataGridColumn headerText="Column 2" dataField="location"/>

        </mx:columns>
    </mx:DataGrid>
    <mx:Button x="97" y="51" label="add" click="addItem(event)"/>
    <mx:TextInput x="117" y="300" id="location_input"/>
    <mx:TextInput x="117" y="340" id="name_input"/>
</mx:Application>

Многие из этих ошибок было легко обнаружить, как только я запустил отладчик.Если вы еще не используете его, я предлагаю почитать его.

...