【问题标题】:Itemclick event in datagrid数据网格中的 Itemclick 事件
【发布时间】:2009-06-09 20:30:21
【问题描述】:

问题可以概括为当点击数据网格中的一个项目时,文本区域显示项目的值,但这里的组件是分开的,因此需要调度事件。

My mxml component file :

<?xml version="1.0" encoding="utf-8"?>
<mx:DataGrid xmlns:mx="http://www.adobe.com/2006/mxml" itemClick="itemClickEvent(event);"  creationComplete="init()">

<mx:Metadata>
  [Event(name="IdSelected", type="one.IdEvent")]
</mx:Metadata>

<mx:Script>
<![CDATA[     import genericReport.*;
              import crewUtilization.*;
              import utils.*;
              import studies.*;
              import mx.rpc.events.FaultEvent;
              import mx.rpc.events.ResultEvent;
              import mx.controls.Alert;
              import mx.events.ListEvent;


      private function itemClickEvent(event:ListEvent):void 
      {
          var _study:Object=event.currentTarget.selectedItem.study;
          dispatchEvent(new IDEvent(_ID));     
      }


]]>

</mx:Script>

<mx:columns>

 <mx:DataGridColumn dataField="name" />
 <mx:DataGridColumn dataField="userId" />
</mx:columns>
</mx:DataGrid>

/////////////////////////////////////// ///////////////

这是我的主要 MXML 应用程序文件:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:custom="*">
<mx:TitleWindow label="Scenario Creation" xmlns:mx="http://www.adobe.com/2006/mxml"
 xmlns:ns1="ccCreation.*">

<mx:Label text="CC CREATION" width="100%" />
<mx:VBox width="100 %" styleName="scenariovboxStyle">

<custom:studySelector id="dg" />
</mx:VBox>
</mx:TitleWindow>   
</mx:Application>

【问题讨论】:

    标签: apache-flex events datagridview click method-dispatch


    【解决方案1】:

    我认为 studyId 引用 dataGrid 可能比 dataGrid 引用 studyId 更好。您可以将其添加到您的主 mxml:

    <mx:TextArea id="studyId" text="{dataGrid.selectedItem.Study}"/>
    

    This should work because TextArea.text will respond to the property changed event of DataGrid.selectedItem, so it will change whenever the selection changes.

    编辑:调度事件:

    您可以从代码中的任何位置调度事件,并且侦听器将能够侦听该事件。例如:

    <mypackage:MyComponent>
    ...
    private function foo():void
    {
        dispatchEvent(new MouseEvent(MouseEvent.CLICK)); // Dispatches a mouse event whenever foo is called.
    }
    

    现在你可以监听那个事件了:

    <mypackage:MyComponent id="myComponent"/>
    ...
    myComponent.addEventListener(MouseEvent.CLICK, mouseClickHandler);
    
    private function mouseClickHandler(event:MouseEvent):void
    {
        ... // code to handle that event here.
    }
    

    希望这会有所帮助!

    <mx:MainComponent creationComplete="init()" ...>
        ...
        private function init(event:Event):void
        {
            ...
            customComponent.addEventListener(StudyEvent.STUDYSELECTED, studySelectedListener);
            ...
        }
    
        private function studySelectedListener(event:StudyEvent):void
        {
            studyid.text = event.study.studyId; // or wherever you store your studyId value
            ...
        }
        ...
    <mx:MainComponent/>
    

    当从您的 customComponent 触发 StudyEvent.STUDYSELECTED 事件时会发生什么,它会被您的主函数捕获并调用 studySelectedListener。

    【讨论】:

    • 嘿...谢谢您的建议....但是,“Study”是一个由“StudyId、name 和 userId”组成的对象呢?我只需要显示 studyId。另外,我的 ItemClick 事件是否正确?即,如果我在我的主 mxml 文件中进行更改并保持 itemclick 事件原样,代码会工作吗??
    • 如果您的对象有 StudyId 和 UserId 作为成员,那么您可以将 selectedItem.Study 替换为 selectedItem.StudyId,因为 selectedItem 将引用您的对象(Study)。您的 itemClickHandler 是正确的,只是您无权访问 textArea。如果您想坚持使用您的事件处理程序,您可以做的是从您的 itemClickHandler 分派一个事件。您的主程序应该捕获该事件并通过设置 textArea 来响应。这与我的建议类似,只是通过使用可绑定属性来隐藏处理程序。
    • 另一种选择是使用将主类作为属性的子类扩展 DataGrid。然后它可以访问 main 中包含的所有组件。
    • 嗨...我现在也展示了主 MXML 应用程序文件......正如你所说,我应该从 itemClickHandler 调度一个事件......我不知道如何调度一个事件并在主屏幕中显示文本。即捕捉输出....如果您能在主应用程序中帮助我处理调度事件代码和相同的修改,我将不胜感激......我现在已经提供了问题中的所有文件代码......请..我请求你帮助我...谢谢...
    • dispatch event code的原因是要求我使用dispatch event code....
    猜你喜欢
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多