`

GridPanel间列的拖拽

阅读更多

实在是太想睡觉了,就懒得整理了,

把项目中用做的源代码直接拷过来了.

Ext.onReady(function() {
			Ext.QuickTips.init();
			Ext.form.Field.prototype.msgTarget = 'side';
			var submitUrl = 'addUser.action';
			var message = '';
			var firstGridStore = new Ext.data.Store({
						url : "getAllRoleUser.action",
						reader : new Ext.data.JsonReader({
									root : "rows"
								}, Ext.data.Record.create([{
											name : "id"
										}, {
											name : "name"
										}, {
											name : "descs"
										}]))
					});
			firstGridStore.load();
			var cols = [{
						id : 'name',
						header : "id",
						sortable : true,
						dataIndex : 'id',
						hidden : true
					}, {
						header : "角色名称",
						width : 95,
						sortable : true,
						dataIndex : 'name'
					}, {
						header : "角色描述",
						width : 95,
						sortable : true,
						dataIndex : 'descs'
					}];

			var firstGrid = new Ext.grid.GridPanel({
						ddGroup : 'secondGridDDGroup',
						store : firstGridStore,
						columns : cols,
						enableDragDrop : true,
						stripeRows : true,
						autoExpandColumn : 'name',
						title : '可选角色'
					});

			var fields = [{
						name : 'id',
						mapping : 'id'
					}, {
						name : 'name',
						mapping : 'name'
					}, {
						name : 'descs',
						mapping : 'descs'
					}];
			var secondGridStore = new Ext.data.JsonStore({
						fields : fields,
						root : 'records'
					});

			var secondGrid = new Ext.grid.GridPanel({
						ddGroup : 'firstGridDDGroup',
						store : secondGridStore,
						columns : cols,
						enableDragDrop : true,
						stripeRows : true,
						autoExpandColumn : 'name',
						title : '已选角色'
					});

			var idField = new Ext.form.TextField({
						hidden : true,
						name : 'user.id',
						value : 0
					});
			var name = new Ext.form.TextField({
						fieldLabel : '用户名',
						id : 'name',
						name : 'user.name',
						regex : /\w/,
						regexText : "只能输入英文和数字",
						allowBlank : false
					});
			var nickname = new Ext.form.TextField({
						fieldLabel : '昵称',
						name : 'user.nickname',
						allowBlank : false
					});
			var password = new Ext.form.TextField({
						fieldLabel : '密    码',
						name : 'newPassword',
						minLength : 6,
						minLengthText : '密码长度最少6位!',
						maxLength : 20,
						maxLengthText : '密码长度最多20位!',
						inputType : 'password',
						id : 'p_NewPassword',
						allowBlank : false
					});
			var newPassword = new Ext.form.TextField({
						xtype : 'textfield',
						fieldLabel : '确认密码',
						name : 'user.password',
						minLength : 6,
						minLengthText : '密码长度最少6位!',
						maxLength : 20,
						maxLengthText : '密码长度最多20位!',
						id : 'p_ConfirmPassword',
						inputType : 'password',
						allowBlank : false
					});
			var state = new Ext.form.Checkbox({
						fieldLabel : '状态',
						width : 160,
						boxLabel : '锁定',
						name : 'user.state',
						checked : false
					});
			var userInfo = new Ext.form.FormPanel({
						bodyStyle : 'padding:5px 5px 0',
						frame : true,
						region : 'north',
						width : 300,
						height : 160,
						items : [{
							layout : 'column',
							items : [{
								columnWidth : .8,
								layout : 'form',
								labelAlign : 'right',
								items : [name, nickname, password, newPassword,
										state, idField]
							}]
						}]
					});

			var displayPanel = new Ext.Panel({
						layout : 'hbox',
						region : 'center',
						autoScroll : true,
						defaults : {
							flex : 1
						},
						layoutConfig : {
							align : 'stretch'
						},
						items : [firstGrid, secondGrid],
						bbar : ['->', new Ext.Button({
									text : '确定',
									handler : function() {
										var form = userInfo.getForm();
										if (!form.isValid()) {
											Ext.Msg.show({
														title : '提示',
														msg : '对不起,你还有未填写的信息!',
														buttons : Ext.Msg.OK,
														width : 300,
														icon : Ext.Msg.WARNING
													});
											return;
										}
										var pwd = password.getValue();
										var newPwd = newPassword.getValue();
										if (newPwd != pwd) {
											Ext.Msg.show({
														title : '提示',
														msg : '你输入的密码不一致!',
														buttons : Ext.Msg.OK,
														width : 300,
														icon : Ext.Msg.WARNING
													});
											return;
										}
										var store = secondGrid.getStore();
										var records = store.getRange(0, store
														.getCount());
										var dataArray = [];
										for (var i = 0; i < records.length; i++) {
											dataArray
													.push(records[i].get("id"));
										}
										form.submit({
													method : 'post',
													url : submitUrl,
													params : {
														roleIdList : dataArray
													},
													success : function() {
														window.parent.alert(
																message,
																Ext.Msg.INFO);
														window.parent.close();
													},
													failure : function() {
														window.parent.alert(
																"对不起,用户名已存在!",
																Ext.Msg.ERROR);
													}
												});
									}
								}), "-", {
							text : '重置',
							handler : function() {
								firstGridStore.reload();
								secondGridStore.removeAll();
								userInfo.getForm().reset();
							}
						}]
					});

			var panel = new Ext.Panel({
						renderTo : 'panel',
						width : 400,
						height : 400,
						layout : 'border',
						items : [displayPanel, userInfo]
					});

			var blankRecord = Ext.data.Record.create(fields);

			var firstGridDropTargetEl = firstGrid.getView().scroller.dom;
			var firstGridDropTarget = new Ext.dd.DropTarget(
					firstGridDropTargetEl, {
						ddGroup : 'firstGridDDGroup',
						notifyDrop : function(ddSource, e, data) {
							var records = ddSource.dragData.selections;
							Ext.each(records, ddSource.grid.store.remove,
									ddSource.grid.store);
							firstGrid.store.add(records);
							firstGrid.store.sort('name', 'ASC');
							return true
						}
					});

			var secondGridDropTargetEl = secondGrid.getView().scroller.dom;
			var secondGridDropTarget = new Ext.dd.DropTarget(
					secondGridDropTargetEl, {
						ddGroup : 'secondGridDDGroup',
						notifyDrop : function(ddSource, e, data) {
							var records = ddSource.dragData.selections;
							Ext.each(records, ddSource.grid.store.remove,
									ddSource.grid.store);
							secondGrid.store.add(records);
							secondGrid.store.sort('name', 'ASC');
							return true
						}
					});
			var roles = '';
			var id = window.parent.id;
			if (id != '') {
				Ext.Ajax.request({
							url : 'populateUser.action',
							params : {
								id : id
							},
							callback : function(options, success, response) {
								var user = eval("(" + response.responseText
										+ ")");
								idField.setValue(user.id);
								name.setValue(user.name);
								nickname.setValue(user.nickname);
								password.setValue(user.password);
								newPassword.setValue(user.password);
								user.state == 'true'
										? state.setValue("on")
										: state.setValue("false");
								roles = user.roleList;
								for (var i = 0; i < roles.length; i++) {
									var records = firstGridStore.getRange(0,
											firstGridStore.getCount());
									for (var j = 0; j < records.length; j++) {
										if (records[j].get("name") == roles[i]) {
											firstGridStore.remove(records[j]);
											secondGridStore.add(records[j]);
										}
									}
								}
							}
						});
				name.setDisabled(true);
				submitUrl = 'updateUser.action';
				message = '修改成功!';
			} else {
				name.setDisabled(false);
				submitUrl = 'addUser.action';
				message = "注册成功!";
			}
		});
分享到:
评论
3 楼 TeddyWang 2010-10-11  
starlight_王亦 写道
TeddyWang 写道
原来是Extjs 居然把分类弄了了Eet……想了很久不知道是什么

不好意思,误人了,多亏你提醒.thank you .

看样是在尝试着用ext,多去ext官网上看看demo,什么例子都可以找到,比较方便。
2 楼 starlight_王亦 2010-10-02  
TeddyWang 写道
原来是Extjs 居然把分类弄了了Eet……想了很久不知道是什么

不好意思,误人了,多亏你提醒.thank you .
1 楼 TeddyWang 2010-09-30  
原来是Extjs 居然把分类弄了了Eet……想了很久不知道是什么

相关推荐

    基于EXT2.0.2表格间数据拖拽

    实现拖拽功能的关键在于扩展EXT的GridPanel类,添加DragDrop支持。这通常涉及以下几个步骤: 1. **初始化DragDrop**:为每个Grid创建一个DragSource和DropTarget实例。DragSource代表可以被拖动的数据源,而...

    ext.net 动态创建gridpanel

    - **Window**:浮动窗口,可以拖动、调整大小,常用于弹出对话框。 - **TabPanel**:包含多个标签页,每个标签页可以包含一个GridPanel。 - **Viewport**:整个页面的容器,常用于全屏布局。 在 `newtpanel....

    Ext.grid.GridPanel属性祥解

    - 说明:布尔值,决定是否允许用户通过拖拽调整列的宽度。 - 示例:`enableColumnResize: true` 17. **hideHeaders** - 说明:布尔值,决定是否隐藏表头。 - 示例:`hideHeaders: false` 18. **maxHeight** -...

    Extjs入门教程(treePanel和GridPanel)

    6. 用户交互:实现拖放功能,允许用户通过拖动TreePanel的节点来调整结构,或者拖放到GridPanel中进行操作。 在"我自己写的Extjs入门教程"这个压缩包中,可能包含的文件可能有HTML示例文件、JavaScript代码文件、...

    ExtJS介绍以及GridPanel

    4. 实例化GridPanel:配置GridPanel的各种属性,如高度、宽度、是否可拖动列等,然后将Store和ColumnModel传递给GridPanel。 5. 渲染GridPanel:将GridPanel添加到容器中,完成渲染。 在实际应用中,GridPanel还...

    GridPanel属性详解

    - **描述**:这两个属性分别控制是否允许用户拖动列以及调整列宽。默认情况下,两者都为`true`。 16. **hideHeaders** - **描述**:此属性控制是否隐藏表格头部,默认为`false`。 17. **maxHeight/...

    Extjs2.02 Gridpanel

    - **列拖动**:允许用户通过拖动调整列的顺序。 - **行选择模式**:可以选择单行、多行或全选模式。 - **工具栏**:可以添加自定义的工具栏,提供额外的操作按钮。 尽管EXTJS GridPanel功能强大,但也有其局限性,...

    ExtJs 2.0 GridPanel+Struts2 with JSON plugin[更新代码]

    ExtJS 2.0 是一个基于 JavaScript 的前端框架,用于构建富互联网应用程序(RIA)。它提供了丰富的组件库,包括 ...在实际项目中,可能还需要根据具体需求进行定制和优化,例如添加编辑功能、行选择、列拖动等。

    delphi xe10.1中TGridPanelLayout控件的demo

    TGridPanelLayout控件是布局管理器的一种,它将容器划分为一个网格,并根据设置的列数和行数将子组件放置在相应的单元格内。这为开发者提供了灵活的界面设计方式,可以创建复杂的网格布局,以适应各种屏幕尺寸和...

    JavaScript中使用sencha gridpanel 编辑单元格、改变单元格颜色

    ExtJS中的表格功能非常强大,包括了排序、缓存、拖动、隐藏某一列、自动显示行号、列汇总、单元格编辑等实用功能,通过本篇文章给大家介绍JavaScript中使用sencha gridpanel 编辑单元、改变单元格颜色,感兴趣的朋友...

    Ext表格控件和树控件

    它提供了丰富的功能,例如排序、缓存、拖动列、隐藏列、自动显示行号、列汇总以及单元格编辑等功能。`GridPanel` 类继承自 `Panel` 类,并且它的 `xtype` 为 `grid`。 要创建一个 `GridPanel`,首先需要定义列信息...

    ExtNet控件使用心得

    - **Locked**: 锁定某一列的位置,即使滚动其他列时,该列仍保持不变,对于数据密集型应用尤其有用。 - **StripeRows**: 斑马线效果,即奇偶行交替显示不同颜色,提高数据阅读性。 #### TreeNode树控件理解 ...

    Ext JS PagingToolbar 组件

    下拉菜单会列出可选的每页记录数,用户可以直接从中选择;滑动条则允许用户通过拖动来直观地设定每页的条目数量。这两种方式都能确保用户能方便地控制数据的分页显示。 在实际应用中,我们可以通过以下步骤来实现...

    ExtPanel和其他控件

    Pinned属性决定是否显示边框,PreserveRatio保持长宽比例,Draggable使控件可移动,Handles定义可拖动的边缘,而Transparent属性则控制边框是否透明。 GridPanel控件常用于数据展示,TrackMouseOver属性会在鼠标滑...

    Extjs中文教程

    - 支持拖拽、调整大小等交互行为。 - 还可以设置遮罩层、关闭按钮等功能。 - **实现Window的最小化功能** - 通过自定义按钮或工具栏项来实现最小化操作。 - 最小化后窗口会被隐藏到任务栏或顶部栏。 #### 十四...

Global site tag (gtag.js) - Google Analytics