`
hgr1985
  • 浏览: 786 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

grid主窗口与子窗口信息交互

阅读更多
前天写了双击GRID然后弹出子窗口,可交互信息的内容
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"  xmlns:title="*"    layout="absolute" creationComplete="init()">
		<mx:Script>
			<![CDATA[
				import mx.core.UIComponent;
				import mx.controls.Alert;
				import flash.events.MouseEvent;
				import mx.events.CloseEvent;
				import mx.events.ListEvent;
				import mx.collections.ArrayCollection;
				import mx.managers.PopUpManager;
				
				private var menuData:ArrayCollection= new ArrayCollection();
				private var canvas:Sprite = new Sprite();
				private var uiComponent:UIComponent;
				
				
				/**
				 * 初始化蒙板等。 
				 **/
				
				private function init():void{
					menuData=new ArrayCollection([
						{no:"101",name:"菜单管理",address:"21",type:"branch"},
						{no:"102",name:"查询测试",address:"22",type:"leaf"},
						{no:"103",name:"更改",address:"23",type:"branch"}
					]);	
					
					//初始化蒙板的颜色以及透明度
					var g:Graphics = canvas.graphics;
					g.beginFill(0x000000,0.3);
					g.drawRect(0,0,this.width,this.height);
					g.endFill();
					menuDataGrid.addEventListener(ListEvent.ITEM_DOUBLE_CLICK, doubleClick);  
					this.menuDataGrid.dataProvider=menuData;
				}
				
				
				/**
				 * 删除操作, 通过提示是否删除,通过事件来捕捉用户的操作.
				 **/
				private function doDel():void{		
					if(menuDataGrid.selectedItem == null){
						Alert.show("请选择需要删除的菜单");	
					}else{
						Alert.show("确定删除?", "删除", 3, this, delClickHandler);
					}
					
				}
				
				/**
				 *如果确认了删除,则将menuData中的记录删除 
				 **/
			   private function delClickHandler(event:CloseEvent):void {
             	   if (event.detail==Alert.YES){
             	     	menuData.removeItemAt(menuDataGrid.selectedIndex);	
             	    }	
            	}
				
				/**
				 * 双击操作,双击目前为编辑数据 
				 **/
				private function doubleClick(event:ListEvent):void{	
					doEdit();					
				}
				
				/**
				 * 编辑操作 
				 **/
				private function doEdit():void{
					if(menuDataGrid.selectedItem == null){
						Alert.show("请选择需要编辑的菜单");	
					}else{
						uiComponent= new UIComponent();
						uiComponent.addChild(canvas);
						this.addChild(uiComponent);	
						var menuWindow:MenuTitleWindow = new MenuTitleWindow();
						var obj:Object= {selectIndex:menuDataGrid.selectedIndex,no:menuDataGrid.selectedItem.no,name:menuDataGrid.selectedItem.name,address:menuDataGrid.selectedItem.address
									,type:menuDataGrid.selectedItem.type};							
						if(menuDataGrid.selectedItem.type == "branch"){
							obj.typeSelIndex=0;
						}else{
							obj.typeSelIndex=1;
						}						
						obj.editDo= editMenuData;
						obj.cancleDo=cancleEdit;
						menuWindow.object = obj;
						PopUpManager.addPopUp(menuWindow,this);
						PopUpManager.centerPopUp(menuWindow);
					}
				}
				/**
				 *增加操作 
				 **/
				private function doAdd():void{
					if(uiComponent == null){
						uiComponent = new UIComponent();
						uiComponent.addChild(canvas)
					}
					this.addChild(uiComponent);
					var menuWindow:MenuTitleWindow = new MenuTitleWindow();
					var object:Object = {editDo:editMenuData,cancleDo:cancleEdit};
					menuWindow.object= object;
					PopUpManager.addPopUp(menuWindow,this);
					PopUpManager.centerPopUp(menuWindow);
				}	
				
				
				/**
				 * 此将函数作为一个变量传递给子窗口,并且在子窗口中调用 
				 * 目前如果是编辑,则能够得到grid的selectIndex,且已经够selectIndex传入子窗口中.
				 * 可以将selectIndex是否存在作为判断是更改菜单还是增加菜单.
				 **/
				private function  editMenuData(menuTitle:MenuTitleWindow):void{
					var object:Object = menuTitle.resultObject;
					if(object.hasOwnProperty("selectIndex")){
						menuData.removeItemAt(object.selectIndex);
						menuData.addItemAt(object,object.selectIndex);
					}else{
						menuData.addItem(object);
					}			
					this.menuDataGrid.dataProvider=menuData;
					this.cancleEdit();
				}
				
				/**
				 *移去蒙板
				 **/
				private function cancleEdit():void{
					this.removeChild(uiComponent);
				}
				
				
			]]>
		</mx:Script>		
		
		<mx:DataGrid id="menuDataGrid" includeInLayout="true" visible="true"  width="100%"  height="90%" 
			editable="false"  y="34" doubleClickEnabled="true" >
   	 		 <mx:columns>
                <mx:DataGridColumn dataField="no"  headerText="编号" />
                <mx:DataGridColumn dataField="name" headerText="名称"/>
                <mx:DataGridColumn dataField="address"	 headerText="地址"/>
               	<mx:DataGridColumn dataField="type"  headerText="类型" />
        	</mx:columns>	
   		 </mx:DataGrid>	
   	 <mx:Button id= "delButton"  label="删除菜单"  click="doDel()"  x="10" y="10"/>
   	 <mx:Button id= "editButton"  label="编辑菜单"  click="doEdit()"  x="126" y="10"/>
   	 <mx:Button id= "addButton"  label="增加菜单"  click="doAdd()"  x="230" y="10"/>
   	
</mx:Application>

<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="300" title="菜单" showCloseButton="false" alpha="1.0" fontFamily="Times New Roman" fontSize="12">

	<mx:Script>
		<![CDATA[
			import mx.managers.FocusManager;
            import mx.managers.PopUpManager;
			import mx.collections.ArrayCollection;
			
			[Bindable]
			public var object:Object;
			
			public var resultObject:Object;
			
			private var saveData:Function;	
			private var cancleEdit:Function;
			
			[Bindable]
			public var types:ArrayCollection = new ArrayCollection(
                [ {label:"branch", data:1}, 
                  {label:"leaf", data:2}]);
			
			
			
			/**
			 * 弹出菜单保存以后,保存数据,主菜单中的保存方法是变量形式传递进来
			 * saveData对应的是 menu.mxml中的editMenuData(menuTitle:MenuTitleWindow).
			 * 将MenuTitleWindow.mxml作为参数传递回去,操作菜单中的结果集. 
			 **/
			private function doSave():void{
				saveData = object.editDo;
				
				if(object.hasOwnProperty("selectIndex")){
					resultObject={no:this.no.text,name:this.menuName.text,
									address:this.address.text,type: this.typeCombo.selectedItem.label,
									selectIndex:object.selectIndex} ;
				}else{
					resultObject={no:this.no.text,name:this.menuName.text,
									address:this.address.text,type: this.typeCombo.selectedItem.label};
				}
				this.saveData(this);
				PopUpManager.removePopUp(this);
			}
			private function doCancle():void{
				cancleEdit = object.cancleDo;
				PopUpManager.removePopUp(this);
				this.cancleEdit();
			}
		]]>
	</mx:Script>
        <mx:HBox width="100%" y="40">
                <mx:Label text="No:" width="65" textAlign="left"/>
                <mx:TextInput id="no"  text="{object.no}" width="100%" textAlign="left"/>
        </mx:HBox>
         <mx:HBox width="100%" y="161">
                  <mx:Label text="菜单名称:" width="65"/>
                <mx:TextInput id="menuName"  text="{object.name}" width="100%" textAlign="left" />
        </mx:HBox>
         <mx:HBox width="100%" y="68">
                  <mx:Label text="地址:" width="65"/>
                  <mx:TextInput id="address"  text="{object.address}" width="100%" textAlign="left"/>
        </mx:HBox>
        <mx:HBox width="100%" y="112">
                <mx:Label text="类型:" width="65"/>
                <mx:ComboBox id = "typeCombo" dataProvider="{types}"  selectedIndex="{object.typeSelIndex}">
                </mx:ComboBox>
        </mx:HBox>
        <mx:Button label="保存" click="doSave()"  x="118" y="228"/>
        <mx:Button label="关闭" click="doCancle()"  x="201" y="228"/>
</mx:TitleWindow >




0
0
分享到:
评论

相关推荐

    WPF子界面嵌入主窗口示例代码

    本文将深入探讨如何实现一个主窗口中嵌入子界面的效果,类似于C#中的TabControl控件,但无需实际使用TabControl。我们将讨论如何通过ContentControl、Frame和Page组件来实现这一目标。 首先,让我们理解核心组件的...

    grid嵌套grid

    子`Grid`的配置应包括列定义、数据源以及可能的交互功能。这些子`Grid`通常在父`Grid`的行展开事件中动态生成。 3. 绑定子`Grid`:将子`Grid`绑定到父`Grid`的特定行。这通常通过在父`Grid`的行数据加载事件中完成...

    WpfApplication1.rar_WPF子窗口

    在Windows Presentation Foundation (WPF) 中,开发人员可以创建丰富的用户界面,相比Windows Forms ...通过研究这些文件,你可以更好地理解如何在WPF中实现子窗口功能,以及如何与WinForms中的子窗口行为相匹配。

    .net WPF实现MDI窗口效果示例

    7. **事件和通信**:最后,为了使子窗口能够与主窗口或其他子窗口通信,可以使用依赖属性、事件或消息传递机制,如MVVM模式中的ViewModel或使用Dispatcher或EventAggregator。 综上所述,虽然WPF并不直接支持MDI,...

    wpf嵌套网页及子窗体

    结合这两种技术,开发者可以在WPF应用中构建复杂的用户界面,例如,在主窗口中嵌入网页,同时使用子窗体来提供额外的功能或交互。`WebBrowser` 控件允许用户与网页互动,而子窗体则可以用来显示详细信息、进行设置或...

    C#嵌入子窗口.zip

    7. **事件处理和通信**:嵌入子窗口后,需要处理子窗口与主窗口之间的交互,如传递数据、响应事件等。C#提供了丰富的事件模型,可以利用事件委托和事件处理方法进行通信。 8. **自定义动画和过渡效果**:为了提升...

    WPF MDI子窗体实现

    为了实现WPF MDI,我们通常会使用一个容器控件,如Grid或Canvas,作为“父窗口”,并在其中添加和管理子窗口。这些子窗口通常是UserControl,它们可以像任何其他WPF元素一样被添加、移动和删除。以下是一个基本步骤...

    flex mdi 窗口的使用

    5. **子窗口的布局**:`MDIContainer`提供了多种布局策略,如“自由”(free)布局允许子窗口任意摆放,而“网格”(grid)布局则会将子窗口按网格排列。 6. **子窗口的事件处理**:监听子窗口的`mdiActivate`、`...

    关于停靠窗口的程序,一个GRID的应用库。

    在编程中,停靠窗口通常与框架窗口(Frame Window)结合使用,使得子窗口可以停靠在框架窗口的边缘或者自由浮动。这种功能在许多IDE(集成开发环境)、文本编辑器以及各种复杂应用软件中非常常见,因为它提供了用户...

    Silverlight3 Mdi多窗口例子

    开发者可能使用Grid或其他布局控件,并通过自定义逻辑来处理子窗口的添加、删除、位置和大小调整。 2. **子窗口控件**:每个子窗口是一个独立的用户控件,可能包含了特定的功能或数据显示。它们需要实现拖放和缩放...

    C# WPF 窗口新建,返回

    在子窗口中,如果需要关闭自身并返回主窗口,可以使用`Close`方法: ```csharp private void Button_Click(object sender, RoutedEventArgs e) { // 关闭子窗口,返回主窗口 Close(); } ``` 在父窗口中,如果...

    delphi获取grid表内容

    在Delphi编程环境中,我们经常会遇到需要与外部应用程序交互的情况,比如获取其他软件中的数据,特别是当这些数据展示在Grid控件中时。本篇将详细介绍如何利用Delphi的低级API函数和句柄机制来捕获并处理列表框...

    wpf WebBrowser在mdi使用

    将WebBrowser控件与MDI结合使用,可以创建出能够在一个主窗口内展示多个网页的WPF应用。 **WebBrowser控件** WebBrowser控件是WPF中提供的一种与Internet Explorer浏览器引擎集成的控件。它不仅能够加载和显示HTML...

    Code for the complete guide to tkinter tutorial

    6. **Toplevel Windows**:除了主窗口外,还可以创建额外的顶级窗口,常用于对话框或子窗口。 7. **Images and Fonts**:Tkinter支持显示图像,并可以自定义字体和颜色,增强界面美观度。 在学习Tkinter时,你需要...

    Wpf中用TabControl做的分页选项卡界面

    为了实现"如果准备打开的子窗口在主界面中没有则打开,有则激活到当前页"的功能,你需要跟踪已有的`TabItem`并检查它们是否与即将打开的子窗口对应。这可以通过使用数据绑定和MVVM(Model-View-ViewModel)模式来...

    C#自定义控件--Popup窗口提醒完整源码__0525.rar

    Popup窗口在Windows应用程序中非常常见,它是一种非模态对话框,可以在主窗口之上显示信息,并且不会阻塞用户的其他操作。在C#中,可以使用System.Windows.Controls.Popup类来创建Popup窗口。Popup控件允许我们...

    C#自定义控件--Popup窗口提醒完整源码_《0528》.rar

    6. **布局管理**:Popup窗口的位置需要根据主窗口或其他元素动态调整,这涉及到WPF的布局系统,如Canvas、Grid或StackPanel等布局容器的使用。 7. **测试和调试**:为了确保Popup窗口的功能和外观满足需求,源码中...

    [ABAP]Function实现ALV Table 二:ALV的弹出窗口形式

    本篇我们将深入探讨如何使用Function来实现ALV Table的弹出窗口形式,这对于创建用户友好的交互式报告至关重要。 在SAP系统中,Function模块通常用于执行特定任务,它们可以作为程序之间的接口,也可以被GUI ...

    Extjs列表详细信息窗口新建后自动加载解决方法

    然而,这种方式并不适用于ExtJS,因为ExtJS通常使用子窗口来展示详细信息,而子窗口的数据来源于主窗口的grid中的记录。在新增数据后,直接从更新后的列表中读取最新一条记录传递给详细页面更为合适。 方案2是成功...

    一个基于iframe的多窗口后台模板

    6. **前端路由**:如果每个窗口对应一个独立的子应用,可能需要使用前端路由技术(如React Router或Vue Router)来管理不同窗口间的导航。 7. **状态管理**:当有多个iframe需要共享数据时,可以使用如Vuex或Redux...

Global site tag (gtag.js) - Google Analytics