实在是太想睡觉了,就懒得整理了,
把项目中用做的源代码直接拷过来了.
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 = "注册成功!";
}
});
分享到:
相关推荐
实现拖拽功能的关键在于扩展EXT的GridPanel类,添加DragDrop支持。这通常涉及以下几个步骤: 1. **初始化DragDrop**:为每个Grid创建一个DragSource和DropTarget实例。DragSource代表可以被拖动的数据源,而...
- **Window**:浮动窗口,可以拖动、调整大小,常用于弹出对话框。 - **TabPanel**:包含多个标签页,每个标签页可以包含一个GridPanel。 - **Viewport**:整个页面的容器,常用于全屏布局。 在 `newtpanel....
- 说明:布尔值,决定是否允许用户通过拖拽调整列的宽度。 - 示例:`enableColumnResize: true` 17. **hideHeaders** - 说明:布尔值,决定是否隐藏表头。 - 示例:`hideHeaders: false` 18. **maxHeight** -...
6. 用户交互:实现拖放功能,允许用户通过拖动TreePanel的节点来调整结构,或者拖放到GridPanel中进行操作。 在"我自己写的Extjs入门教程"这个压缩包中,可能包含的文件可能有HTML示例文件、JavaScript代码文件、...
4. 实例化GridPanel:配置GridPanel的各种属性,如高度、宽度、是否可拖动列等,然后将Store和ColumnModel传递给GridPanel。 5. 渲染GridPanel:将GridPanel添加到容器中,完成渲染。 在实际应用中,GridPanel还...
- **描述**:这两个属性分别控制是否允许用户拖动列以及调整列宽。默认情况下,两者都为`true`。 16. **hideHeaders** - **描述**:此属性控制是否隐藏表格头部,默认为`false`。 17. **maxHeight/...
- **列拖动**:允许用户通过拖动调整列的顺序。 - **行选择模式**:可以选择单行、多行或全选模式。 - **工具栏**:可以添加自定义的工具栏,提供额外的操作按钮。 尽管EXTJS GridPanel功能强大,但也有其局限性,...
ExtJS 2.0 是一个基于 JavaScript 的前端框架,用于构建富互联网应用程序(RIA)。它提供了丰富的组件库,包括 ...在实际项目中,可能还需要根据具体需求进行定制和优化,例如添加编辑功能、行选择、列拖动等。
TGridPanelLayout控件是布局管理器的一种,它将容器划分为一个网格,并根据设置的列数和行数将子组件放置在相应的单元格内。这为开发者提供了灵活的界面设计方式,可以创建复杂的网格布局,以适应各种屏幕尺寸和...
ExtJS中的表格功能非常强大,包括了排序、缓存、拖动、隐藏某一列、自动显示行号、列汇总、单元格编辑等实用功能,通过本篇文章给大家介绍JavaScript中使用sencha gridpanel 编辑单元、改变单元格颜色,感兴趣的朋友...
它提供了丰富的功能,例如排序、缓存、拖动列、隐藏列、自动显示行号、列汇总以及单元格编辑等功能。`GridPanel` 类继承自 `Panel` 类,并且它的 `xtype` 为 `grid`。 要创建一个 `GridPanel`,首先需要定义列信息...
- **Locked**: 锁定某一列的位置,即使滚动其他列时,该列仍保持不变,对于数据密集型应用尤其有用。 - **StripeRows**: 斑马线效果,即奇偶行交替显示不同颜色,提高数据阅读性。 #### TreeNode树控件理解 ...
下拉菜单会列出可选的每页记录数,用户可以直接从中选择;滑动条则允许用户通过拖动来直观地设定每页的条目数量。这两种方式都能确保用户能方便地控制数据的分页显示。 在实际应用中,我们可以通过以下步骤来实现...
Pinned属性决定是否显示边框,PreserveRatio保持长宽比例,Draggable使控件可移动,Handles定义可拖动的边缘,而Transparent属性则控制边框是否透明。 GridPanel控件常用于数据展示,TrackMouseOver属性会在鼠标滑...
- 支持拖拽、调整大小等交互行为。 - 还可以设置遮罩层、关闭按钮等功能。 - **实现Window的最小化功能** - 通过自定义按钮或工具栏项来实现最小化操作。 - 最小化后窗口会被隐藏到任务栏或顶部栏。 #### 十四...