【问题标题】:calc columns in datagrid计算数据网格中的列
【发布时间】:2013-02-11 06:30:58
【问题描述】:

我真的需要你的帮助。人员遇到以下问题: 我有一个数据网格,其中有一列名为:第 2 列,它有一个固定的数字,其余的是可编辑的列 = true,以便我的客户可以输入数据。 我希望每一个,因为我可以手动插入来调用我进行比较的函数。那行我正在更改值 ¿¿ 插入该行不能大于列的值:第 2 列

这是针对每个采样线完成的

 Line 1: Fixed number ==> 85
 I can get editable columns in column 3: value = 20
 I can get editable columns in column 4: value = 50
 I can get editable columns in column 5: value = 100

当该值大于列 Column 2 时发出警报。

我正在使用 Flex 3

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:ArrayCollection id="arrColl">
    <mx:source>
        <mx:Array>
            <mx:Object label="Student A" score="85" />
            <mx:Object label="Student B" score="48" />
            <mx:Object label="Student C" score="71" />
            <mx:Object label="Student D" score="88" />
            <mx:Object label="Student E" score="24" />
            <mx:Object label="Student F" score="64" />
            <mx:Object label="Student G" score="76" />
            <mx:Object label="Student H" score="76" />
            <mx:Object label="Student I" score="93" />
            <mx:Object label="Student J" score="88" />
            <mx:Object label="Student K" score="48" />
            <mx:Object label="Student L" score="76" />
        </mx:Array>
    </mx:source>
</mx:ArrayCollection>
<mx:DataGrid x="396" y="309" dataProvider="{arrColl}" editable="true">
    <mx:columns>
        <mx:DataGridColumn headerText="Column 1"  dataField="label"  />
        <mx:DataGridColumn headerText="Column 2"  dataField="score"  />
        <mx:DataGridColumn headerText="Column 3"  editable="true"  dataField="col1"/>
        <mx:DataGridColumn headerText="Column 4"  editable="true"  dataField="col2"/>
        <mx:DataGridColumn headerText="Column 5"  editable="true"  dataField="col3"/>
        <mx:DataGridColumn headerText="Column 6"  editable="true"  dataField="col4"/>
        <mx:DataGridColumn headerText="Column 7"  editable="true"  dataField="col5" />
    </mx:columns>
</mx:DataGrid>

【问题讨论】:

    标签: apache-flex actionscript flex3


    【解决方案1】:

    你需要这样做:

    1. 为 score 列设置 editable = "false" 以防止用户更改固定值
    2. 为 col1 到 col5 列设置限制,以便仅输入数字
    3. 添加一个检查函数来做camparison

    这是我的代码:

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.controls.TextInput;
            import mx.events.DataGridEvent;
            import mx.events.DataGridEventReason;
    
            protected function checkInput(event:DataGridEvent):void
            {
                if (event.reason == DataGridEventReason.NEW_ROW || event.reason == DataGridEventReason.NEW_COLUMN)
                {
                    var editor:TextInput = (event.currentTarget as DataGrid).itemEditorInstance as TextInput;
                    var text:String = editor.text;
    
                    if( event.dataField == "col1" || event.dataField == "col2" || event.dataField == "col3" || event.dataField == "col4" || event.dataField == "col5")
                    {
                        if(int(text) > int(event.itemRenderer.data.score)) 
                        {                           
                            editor.text = "";
    
                            event.preventDefault();
    
                            Alert.show(text + " is too big!");
    
                            return;
                        }
                    }
                }
            }
    
        ]]>
    </mx:Script>
    <mx:ArrayCollection id="arrColl">
        <mx:source>
            <mx:Array>
                <mx:Object label="Student A" score="85"/>
                <mx:Object label="Student B" score="48"/>
                <mx:Object label="Student C" score="71"/>
                <mx:Object label="Student D" score="88"/>
                <mx:Object label="Student E" score="24"/>
                <mx:Object label="Student F" score="64"/>
                <mx:Object label="Student G" score="76"/>
                <mx:Object label="Student H" score="76"/>
                <mx:Object label="Student I" score="93"/>
                <mx:Object label="Student J" score="88"/>
                <mx:Object label="Student K" score="48"/>
                <mx:Object label="Student L" score="76"/>
            </mx:Array>
        </mx:source>
    </mx:ArrayCollection>
    <mx:DataGrid x="396" y="309" dataProvider="{arrColl}" editable="true" itemEditEnd="checkInput(event)">
        <mx:columns>
            <mx:DataGridColumn headerText="Column 1"  dataField="label" editable="false"/>
            <mx:DataGridColumn headerText="Column 2"  dataField="score" editable="false"/>
    
            <mx:DataGridColumn headerText="Column 3"  editable="true" dataField="col1">
                <mx:itemEditor>
                    <mx:Component>
                        <mx:TextInput restrict="0-9"/>
                    </mx:Component>
                </mx:itemEditor> 
            </mx:DataGridColumn>
    
            <mx:DataGridColumn headerText="Column 4"  editable="true" dataField="col2">
                <mx:itemEditor>
                    <mx:Component>
                        <mx:TextInput restrict="0-9"/>
                    </mx:Component>
                </mx:itemEditor> 
            </mx:DataGridColumn>
    
            <mx:DataGridColumn headerText="Column 5"  editable="true" dataField="col3">
                <mx:itemEditor>
                    <mx:Component>
                        <mx:TextInput restrict="0-9"/>
                    </mx:Component>
                </mx:itemEditor> 
            </mx:DataGridColumn>
    
            <mx:DataGridColumn headerText="Column 6"  editable="true" dataField="col4">
                <mx:itemEditor>
                    <mx:Component>
                        <mx:TextInput restrict="0-9"/>
                    </mx:Component>
                </mx:itemEditor> 
            </mx:DataGridColumn>
    
            <mx:DataGridColumn headerText="Column 7"  editable="true" dataField="col5">
                <mx:itemEditor>
                    <mx:Component>
                        <mx:TextInput restrict="0-9"/>
                    </mx:Component>
                </mx:itemEditor> 
            </mx:DataGridColumn>
    
        </mx:columns>
    </mx:DataGrid>
    </mx:Application>
    

    【讨论】:

    • 哇!!很不错!!非常非常感谢您的帮助。正是我需要的帮助。我很感激。如果有人需要未来,我做了一点修改,让脚本。但它给了我一个完美的基础来改进它。我要感谢您的帮助!
    【解决方案2】:
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
    <![CDATA[
        import mx.controls.Alert;
        import mx.controls.TextInput;
        import mx.events.DataGridEvent;
        import mx.events.DataGridEventReason;
    
        [Bindable]
        var Acumula:int = 0;
    
        protected function checkInput(event:DataGridEvent):void
        {
    
    
            if (event.reason == DataGridEventReason.NEW_ROW || event.reason == DataGridEventReason.NEW_COLUMN)
            {
                var editor:TextInput = (event.currentTarget as DataGrid).itemEditorInstance as TextInput;
                var text:String = editor.text;
                var myEditor:TextInput =  TextInput(event.currentTarget.itemEditorInstance);
    
    
                Acumula += int(myEditor.text);
                if(int(Acumula) > int(event.itemRenderer.data.score)) 
                    {                           
                        Acumula = 0;
    
                        event.preventDefault();
    
                        Alert.show(text + "ULTRAPASSOU!");
    
                        return;
                    }
    
            }
        }
    
    ]]>
    </mx:Script>
    <mx:ArrayCollection id="arrColl">
    <mx:source>
        <mx:Array>
            <mx:Object label="Student A" score="85"/>
            <mx:Object label="Student B" score="48"/>
            <mx:Object label="Student C" score="71"/>
            <mx:Object label="Student D" score="88"/>
            <mx:Object label="Student E" score="24"/>
            <mx:Object label="Student F" score="64"/>
            <mx:Object label="Student G" score="76"/>
            <mx:Object label="Student H" score="76"/>
            <mx:Object label="Student I" score="93"/>
            <mx:Object label="Student J" score="88"/>
            <mx:Object label="Student K" score="48"/>
            <mx:Object label="Student L" score="76"/>
        </mx:Array>
    </mx:source>
    </mx:ArrayCollection>
    <mx:DataGrid x="10" y="28" dataProvider="{arrColl}" editable="true" itemEditEnd="checkInput(event)">
    <mx:columns>
        <mx:DataGridColumn headerText="Column 1"  dataField="label" editable="false"/>
        <mx:DataGridColumn headerText="Column 2"  dataField="score" editable="false"/>
    
        <mx:DataGridColumn headerText="Column 3"  editable="true" dataField="col1">
            <mx:itemEditor>
                <mx:Component>
                    <mx:TextInput restrict="0-9"/>
                </mx:Component>
            </mx:itemEditor> 
        </mx:DataGridColumn>
    
        <mx:DataGridColumn headerText="Column 4"  editable="true" dataField="col2">
            <mx:itemEditor>
                <mx:Component>
                    <mx:TextInput restrict="0-9"/>
                </mx:Component>
            </mx:itemEditor> 
        </mx:DataGridColumn>
    
        <mx:DataGridColumn headerText="Column 5"  editable="true" dataField="col3">
            <mx:itemEditor>
                <mx:Component>
                    <mx:TextInput restrict="0-9"/>
                </mx:Component>
            </mx:itemEditor> 
        </mx:DataGridColumn>
    
        <mx:DataGridColumn headerText="Column 6"  editable="true" dataField="col4">
            <mx:itemEditor>
                <mx:Component>
                    <mx:TextInput restrict="0-9"/>
                </mx:Component>
            </mx:itemEditor> 
        </mx:DataGridColumn>
    
        <mx:DataGridColumn headerText="Column 7"  editable="true" dataField="col5">
            <mx:itemEditor>
                <mx:Component>
                    <mx:TextInput restrict="0-9"/>
                </mx:Component>
            </mx:itemEditor> 
        </mx:DataGridColumn>
    
    </mx:columns>
    </mx:DataGrid>
    <mx:Label x="164" y="211" text="{Acumula}"/>
    </mx:Application>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 2013-02-25
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多