java_easyui体系之DataGrid(4)[转]
一:简介
在前面DataGrid(3)的基础上添加后台的实现、本来是想只搭建前台页面的、后台不写、现在觉得还是都实现好点、从真实情况出发、后台用的ssh。
1、 新增冻结列功能。
2、 实现界面的添加、删除、修改、撤销编辑、撤销选中、清空datagrid记录的功能、在后台也对其实现。
3、 新增右键菜单功能。
4、 可根据右键菜单来对记录进行新增、修改、删除。
二:效果图
三:关键部分
1、新增冻结列功能:
a) 具体需求描述:
有时候表格的列数太多(这里在前面的补充中也说道过、datagrid的列较少的时候、可以把其一个属性fitColumn设为true、这样列平局充满表格、好看点)的时候、当用户想要参照某个列的数据查看其他数据的时候、比如根据某个人的名字查看他的具体信息、这时候就可以在拖动滚动条查看后面的记录的时候让名字那一列始终按固定大小显示在原来位置、
b) 效果图:
c) 关键代码:作为datagrid的一个属性、当然是在初始化的时候指定:具体的见user.jsp
frozenColumns : [[{//冻结列、不管数据列再多、拖动下方滚动条时、其中的列都不会滚动(这些列下方根本就没有滚动条)、参数与columns一样、注意:双中括号——[[{xxx},{xxx}]]
title : '编号',
field : 'id',
width : 100,//必须要给
checkbox : true, }, {
title : '姓名',
field : 'userName',
width : 100,//必须要给
editor : {
type:'validatebox',
options:{
required: true,
}
}
} ]],
2、添加、修改
a) 具体业务描述:很常见的操作。
b) 通过datagrid的onAfterEditor事件来提交、这里我暂时只对一行进行操作、不进行批量添加、修改。如何区分是添加事件还是修改事件?
c) 添加、修改都有成功、失败。成功如何将数据持久化到数据库中和页面显示(即点击撤销按钮不会将添加、修改的内容取消显示)?失败如何将事物回滚到添加、删除之前?
d) 关键代码:对上面问题有很详细的注释、这也是注释有点多的原因、不再抽出来。。。
onAfterEdit : function(rowIndex, rowData, changes){
/*
* 如何区别是添加、还是修改?
*/
//获取所有插入的行信息
var inserted = $('#datagrid').datagrid('getChanges','inserted');
//获取所有被修改的行信息
var updated = $('#datagrid').datagrid('getChanges','updated');
//传入后台的url、根据到底是添加、还是修改动态改变、即进入Action中不同的方法。
var url = '';
if(inserted.length > 0){
url='login_addUser.action';
}
if(updated.length > 0){
url='login_updateUser.action';
}
$.ajax({
url : url,
data : rowData,
dataType : 'json',
success : function(r){
if(r.success && r){
//如果成功、则确定显示操作之后的行信息、即点击撤销的时候不会回滚事务(仅是前台、此时后台关于数据库的已经处理)。
$('#datagrid').datagrid('acceptChanges');
//给出提示、是通过后台传过来的一个json对象
$.messager.show({
title : '提示',
msg : r.msg,
});
}else{
//如果失败、则回滚事务(仅是前台、此时后台关于数据库的已经处理)。
$('#datagrid').datagrid('rejectChanges');
$.messager.alert('错误',r.msg,'error');
}
editRow = undefined;
$('#datagrid').datagrid('unselectAll');
}
});
},
3、右键菜单:
a) 需求描述、用户就喜欢用鼠标右键菜单来操作。
b) 构建右键菜单
c) 如何将右键菜单动态的显示在鼠标单机右键的位置
d) 如何透过显示的右键菜单项操作数据、这里操作数据就是通过onclick事件触发函数、函数功能和datagrid上面的按钮功能几乎一样、代码中做了一个抽取。
e) 关键代码:
构造右键菜单div:
<%-- 通过指定class的方式、构造右键菜单--%>
<div id="mm" class="easyui-menu" style="width:120px;display:none;">
<div onclick="addUser()" iconcls="icon-add">增加</div>
<div onclick="delUsers()" iconcls="icon-remove">删除</div>
<div onclick="updateUser()" iconcls="icon-edit">编辑</div>
</div>
显示右键菜单div:
//显示右键菜单、并且设置显示位置就是触发鼠标右击的位置。
onRowContextMenu : function(e, rowIndex, rowData){
//1、阻止原来浏览器右键事件
e.preventDefault();
$(this).datagrid('unselectAll');
$(this).datagrid('selectRow', rowIndex);
//显示自定义右键菜单
$('#mm').menu('show', {
//动态显示右键菜单位置
left: e.pageX,
top: e.pageY
});
}
实现右键菜单功能:
/*
* 右键菜单功能
*/
//添加记录
function addUser(){
privateAddUser();
} //修改记录
function updateUser(){
privateUpdateUser();
} //删除记录
function delUsers(){
privateDelUsers();
}
四:源码
1、前台代码:
a) datagrid2.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <title>My JSP 'original.jsp' starting page</title> <link rel="stylesheet" type="text/css" href="css/easyui/default/easyui.css">
<link rel="stylesheet" type="text/css" href="css/easyui/icon.css">
<link rel="stylesheet" type="text/css" href="css/easyui/demo.css">
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.easyui.min.js"></script>
<script type="text/javascript" src="js/chyUtils.js"></script> <script type="text/javascript">
function userManage(id){
console.info(id);
if("door" == id){
$('#tt').tabs('select', 0);
}
if("userManage" == id){
$('#tt').tabs('select', 1);
}
}
</script> <div data-options="region:'north', split:false" style="height:100px;"></div>
<div data-options="region:'east',title:'在线列表',split:true" style="width:160px;"></div>
<div data-options="region:'west',title:'功能导航',split:true" style="width:160px;">
<div class="easyui-accordion" data-options="fit:true,border:false">
<div title="Title1" data-options=" iconCls:'icon-save'" style="padding:10px;">
content1
</div>
<div title="Title2" data-options="fit:true,border:false,iconCls:'icon-reload',selected:true" style="padding:10px">
<ul>
<li>门户 </li>
<li>用户管理</li>
</ul>
</div>
</div>
</div>
<div data-options="region:'center',title:'欢迎'," style="overflow: hidden;">
<div id="tt" class="easyui-tabs" data-options="fit:true,border:false,">
<div title="门户" data-options="closable:true">
门户
</div>
<div id="userManage" title="用户管理" data-options="href:'user.jsp',closable:true">
</div>
</div>
</div>
b) user.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <script type="text/javascript">
var editRow = undefined;//用于存放当前编辑行的index
$(function() { $('#datagrid').datagrid({
url : 'login_getUserJson.action',
title : '用户列表',
iconCls : 'icon-save',
pagination : true,
pageSize : 10,
pageList : [ 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 ],
fit : true,//使表格自适应
fitColumns : false,//当使用冻结列:frozenColumms的时候必须设置为false或者不写
nowrap : false,//表格中的文字可以换行、默认是false、不能换行、这样在文字很多的时候就看不到全部:使用真实的数据去测试
border : false,
idFeild : 'id',//标识、会记录我们选中项的id、不一定是id、通常使用主键
sortName : 'id',//设置默认排序时的 字段(必须是field中的一个字段)
sortOrder : 'asc',//是按照升序还是降序排序 但是仅仅添加这两个字段并不会自动排序、这样写的意义就是前台会自动的向后台传递两个参数:sort order,我们可以在后台查询记录的时候进行排序
frozenColumns : [[{//冻结列、不管数据列再多、拖动下方滚动条时、其中的列都不会滚动(这些列下方根本就没有滚动条)、参数与columns一样、注意:双中括号——[[{xxx},{xxx}]]
title : '编号',
field : 'id',
width : 100,//必须要给
checkbox : true, }, {
title : '姓名',
field : 'userName',
width : 100,//必须要给
editor : {
type:'validatebox',
options:{
required: true,
}
}
} ]],
columns : [ [ {
title : '密码',
field : 'passWord',
width : 200,//必须要给
editor : {
type:'validatebox',
options:{
required: true,
}
}
}, {
title : '创建时间',
field : 'createTime',
width : 200,//必须要给
editor : {
type:'datetimebox',//扩展的用于选择具体时间的类型
options:{
required: true,
}
}
}, {
title : '修改时间',
field : 'updateTime',
width : 200,//必须要给
editor : {
type:'datetimebox',//扩展的用于选择具体时间的类型
options:{
required: true,
}
} } ] ],
toolbar : [ {
text : '增加',
iconCls : 'icon-add',
handler : function() {
privateAddUser();
}
}, '-', {
text : '删除',
iconCls : 'icon-remove',
handler : function() {
privateDelUsers();
}
}, '-', {
text : '修改',
iconCls : 'icon-edit',
handler : function() {
privateUpdateUser();
}
}, '-',{
text : '保存',
iconCls : 'icon-save',
handler : function() {
$('#datagrid').datagrid('endEdit', editRow);
}
}, '-',{
text : '取消编辑',
iconCls : 'icon-undo',
handler : function() {
//将事务回滚、取消选中的行
editRow = undefined;
$('#datagrid').datagrid('rejectChanges');
$('#datagrid').datagrid('unselectAll');
}
}, '-',{
text : '取消选中',
iconCls : 'icon-undo',
handler : function() {
$('#datagrid').datagrid('unselectAll');
}
}, '-',{
text : '清空显示',
iconCls : 'icon-undo',
handler : function() {
$('#datagrid').datagrid('loadData', []);
}
}, '-',{
text : '还原显示',
iconCls : 'icon-redo',
handler : function() {
$('#datagrid').datagrid('load');
}
}, '-' ],
onAfterEdit : function(rowIndex, rowData, changes){
/*
* 如何区别是添加、还是修改?
*/
//获取所有插入的行信息
var inserted = $('#datagrid').datagrid('getChanges','inserted');
//获取所有被修改的行信息
var updated = $('#datagrid').datagrid('getChanges','updated');
//传入后台的url、根据到底是添加、还是修改动态改变、即进入Action中不同的方法。
var url = '';
if(inserted.length > 0){
url='login_addUser.action';
}
if(updated.length > 0){
url='login_updateUser.action';
}
$.ajax({
url : url,
data : rowData,
dataType : 'json',
success : function(r){
if(r.success && r){
//如果成功、则确定显示操作之后的行信息、即点击撤销的时候不会回滚事务(仅是前台、此时后台关于数据库的已经处理)。
$('#datagrid').datagrid('acceptChanges');
//给出提示、是通过后台传过来的一个json对象
$.messager.show({
title : '提示',
msg : r.msg,
});
}else{
//如果失败、则回滚事务(仅是前台、此时后台关于数据库的已经处理)。
$('#datagrid').datagrid('rejectChanges');
$.messager.alert('错误',r.msg,'error');
}
editRow = undefined;
$('#datagrid').datagrid('unselectAll');
}
});
},
//双击修改行
onDblClickRow : function(rowIndex, rowData){
changeUpdateEditor();
$('#datagrid').datagrid('unselectAll');
if(editRow != undefined){
$('#datagrid').datagrid('endEdit', editRow);
editRow = undefined;
}
if(editRow == undefined){
$('#datagrid').datagrid('beginEdit',rowIndex);
editRow = rowIndex;
}
},
//显示右键菜单、并且设置显示位置就是触发鼠标右击的位置。
onRowContextMenu : function(e, rowIndex, rowData){
//1、阻止原来浏览器右键事件
e.preventDefault();
$(this).datagrid('unselectAll');
$(this).datagrid('selectRow', rowIndex);
//显示自定义右键菜单
$('#mm').menu('show', {
//动态显示右键菜单位置
left: e.pageX,
top: e.pageY
});
}
});
});
/*
* 右键菜单功能
*/
//添加记录
function addUser(){
privateAddUser();
} //修改记录
function updateUser(){
privateUpdateUser();
} //删除记录
function delUsers(){
privateDelUsers();
} function privateDelUsers(){
var rows = $('#datagrid').datagrid('getSelections');
if(rows.length > 0){
$.messager.confirm('请确认','您确定要删除当前选择的'+rows.length+'项吗?', function(option){
if(option){
//一般将id的一个集合传到后台删除
var ids = [];
for(var i = 0; i< rows.length; i++){
ids.push(rows[i].id);
}
console.info(ids.join(','));
$.ajax({
url : 'login_delUsers.action',
data : {
ids : ids.join(',')
},
dataType : 'json',
success : function(r){
$('#datagrid').datagrid('load');
$('#datagrid').datagrid('unselectAll');
$.messager.show({
title : '提示',
msg : '删除成功'
});
}
});
}
});
}else{
$.messager.alert('提示', '请选择要删除的记录', 'error');
}
} function privateUpdateUser(){
var rows = $('#datagrid').datagrid('getSelections');
if(rows.length ==1){
changeUpdateEditor();
if(editRow != undefined){
$('#datagrid').datagrid('endEdit', editRow);
editRow = undefined;
}
if(editRow == undefined){
var rowIndex = $('#datagrid').datagrid('getRowIndex',rows[0]);
$('#datagrid').datagrid('beginEdit',rowIndex);
editRow = rowIndex;
$('#datagrid').datagrid('unselectAll');
}
}else if( rows.length == 0){
$.messager.alert('提示', '请选择一条修改记录!','info');
}else if(rows.length >= 1){
$.messager.alert('提示', '只能选择一条修改记录!','info');
}
} function privateAddUser(){
if(editRow != undefined){
$('#datagrid').datagrid('endEdit', editRow);
}
if(editRow == undefined){
//新增的时候不让用户选择创建时间、应该用后台自动生成的当前的时间
changeAddEditor();
$('#datagrid').datagrid('insertRow', {
index : 0,
row : {
userName:'请输入名称',
passWord:'请输入密码'
}
});
editRow = 0;
$('#datagrid').datagrid('beginEdit',0);
}
} //查询数据
function show() {
$('#datagrid').datagrid('load', serializeObject($('#searchForm')));
} //清除查询条件、返回初始数据展示状态
function clean() {
$('#datagrid').datagrid('load', {});
$('#searchForm').find('input').val('');
} //添加行时改变editor
function changeAddEditor(){
$('#datagrid').datagrid('removeEditor', ['updateTime','createTime']);
$('#datagrid').datagrid('addEditor', {
field : 'passWord',
editor : {
type:'validatebox',
options:{
required: true,
}
}
});
} //修改行是改变editor
function changeUpdateEditor(){
$('#datagrid').datagrid('removeEditor','passWord');
$('#datagrid').datagrid('addEditor', [{
field : 'createTime',
editor : {
type:'datetimebox',//扩展的用于选择具体时间的类型
options:{
required: true,
}
}
},{
field : 'updateTime',
editor : {
type:'datetimebox',//扩展的用于选择具体时间的类型
options:{
required: true,
}
}
}]);
} </script> <div class="easyui-layout" data-options="fit:true,border:false,">
<div data-options="region:'north',border:false,title:'过滤'" style="height: 140px;overflow: hidden">
<form id="searchForm">
<table class="datagrid-toolbar" style="height:100%;width:100%">
<tbody><tr>
<th>用户名</th>
<td><input id="username" name="username" style="width: 320px">
</td>
</tr>
<tr>
<th>创建时间</th>
<td><input name="createTimeStart" editable="false" class="easyui-datetimebox" style="width:155px;"> 至 <input name="createTimeEnd" editable="false" class="easyui-datetimebox" style="width:155px;"></td>
</tr>
<tr>
<th>修改时间</th>
<td><input name="modifyTimeStart" editable="false" class="easyui-datetimebox" style="width:155px;"> 至 <input name="modifyTimeEnd" editable="false" class="easyui-datetimebox" style="width:155px;"> 查询 清空</td>
</tr>
</tbody></table>
</form> </div> <div data-options="region:'center',border:false">
<table id="datagrid"></table>
</div>
<%-- 通过指定class的方式、构造右键菜单--%>
<div id="mm" class="easyui-menu" style="width:120px;display:none;">
<div onclick="addUser()" iconcls="icon-add">增加</div>
<div onclick="delUsers()" iconcls="icon-remove">删除</div>
<div onclick="updateUser()" iconcls="icon-edit">编辑</div>
</div>
</div>
b) chyUtils.js:与前面一样、不再贴了。
2、后台代码
后台可以自己实现、不再一一贴出来、这里就贴个关键的action、一个处理返回数据的Json、一个UserDTO、源码有时间再上传到csdn上。
a) LoginAction:
private UserService userService;
private int page;
private int rows;
private String sort;
private String order; private String username;
private String password;
private int id;
private String userName;
private String passWord;
private String createTime;
private String updateTime;
private String ids; public String login() throws IOException{
String result = null; if("admin".equals(username) && "123".equals(password)){
result = "success";
}else{
result = "faile";
} pwObj(result);
return null;
} public String regist() throws IOException{
pwObj("success");
return null;
} /**
* 添加用户
*/
public String addUser() throws JsonGenerationException, JsonMappingException, IOException{
Json j = new Json();
UserDTO u = new UserDTO();
BeanUtils.copyProperties(this, u);
u.setCreateTime(getCurrentTime());
u.setUpdateTime(getCurrentTime());
boolean addStatu = userService.addUser(u);
if(addStatu){
j.setMsg("Add User [" + u.getUserName() + "] Success !");
j.setSuccess(addStatu);
}else{
j.setMsg("Add User [" + u.getUserName() + "] fail !");
j.setSuccess(addStatu);
}
pwObj(getJson(j));
return null; } /**
* 更新用户信息
*/
public String updateUser() throws JsonGenerationException, JsonMappingException, IOException{
Json j = new Json();
UserDTO u = new UserDTO();
BeanUtils.copyProperties(this, u);
u.setCreateTime(createTime);
u.setUpdateTime(updateTime);
boolean addStatu = userService.updateUser(u);
if(addStatu){
j.setMsg("Update User [" + u.getUserName() + "] Success !");
j.setSuccess(addStatu);
}else{
j.setMsg("Update User [" + u.getUserName() + "] fail !");
j.setSuccess(addStatu);
}
pwObj(getJson(j));
return null;
} /**
* 删除用户信息
*/
public String delUsers() throws JsonGenerationException, JsonMappingException, IOException{
Json j = new Json();
try {
j.setMsg("Delete users success !");
j.setSuccess(true);
userService.delUsers(ids);
} catch (Exception e) {
j.setMsg("Delete users fail !");
e.printStackTrace();
}
pwObj(getJson(j));
return null;
} /**
* 初始化datagrid
*/
public String getUserJson() throws IOException{
List<userdto> userList = userService.getUsers(page, rows);
int total = userService.getCountUsers();
Map<string, object=""> m = new HashMap<string, object="">();
m.put("total", total);
m.put("rows", userList);
pwObj(getJson(m));
return null;
} private String getCurrentTime(){
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
return sDateFormat.format(new java.util.Date()); } private String getJson(Object o) throws IOException,
JsonGenerationException, JsonMappingException {
ObjectMapper om = new ObjectMapper();
StringWriter sw = new StringWriter();
JsonGenerator jg = new JsonFactory().createJsonGenerator(sw);
om.writeValue(jg, o);
jg.close();
return sw.toString();
} private void pwObj(Object obj) throws IOException {
PrintWriter pw = ServletActionContext.getResponse().getWriter();
pw.print(obj);
pw.flush();
pw.close();
}</string,></string,></userdto>
b) 使用到的Json工具类:
package com.chy.ssh.utils; public class Json {
private boolean success = false; //操作是否成功
private String msg; //提示信息
private Object o; //其他信息
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getO() {
return o;
}
public void setO(Object o) {
this.o = o;
}
}
c) UserDTO:
package com.chy.ssh.business.bean; import java.io.Serializable; @SuppressWarnings("serial")
public class UserDTO implements Serializable{
private int id;
private String userName;
private String passWord;
private String createTime;
private String updateTime; public UserDTO() {
super();
} public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getUpdateTime() {
return updateTime;
}
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} }
五:补充说明
后面的内容会越来越多、老想着把东西全贴出来不现实、可能只会贴关键的想说的地方、有时间将源码上传到csdn上、也可以留个邮箱、共同进步。
java_easyui体系之DataGrid(4)[转]的更多相关文章
- java_easyui体系之DataGrid(3)[转]
一:简介 在2的基础上实现增删改.增.改都是通过行编辑来实现的.具体业务逻辑: 1. 增加一条记录的时候: a) 在datagrid表格最前端增加一行(当然也可在指定位置增加.)增加的行的字段必须与要 ...
- java_easyui体系之DataGrid(2)[转]
一:简介 在1的基础上添加layout组件.实现通过条件动态的从后台查询数据到前台展示.使用的方式是将查询单独作为一个layout中的一个面板. 二:关键之处 1.效果图: 2.左侧的折叠组件: 折叠 ...
- java_easyui体系之DataGrid(1)[转]
一:简介 以表格的形式展示数据.项目中式很常见的一个使用.table展示数据.牵扯到分页.上一页下一页.首页.尾页.翻页.选中展示的记录用于操作.总记录数等等.使用DataGrid很容易实现这一点. ...
- java_easyui体系之目录 [转]
摘要:简单介绍form的提交方式.与validatebox的结合使用. 一:form简介 Easyui中的form有两种提交方式.结合自己新添加的一种ajax提交方式.本文简单说明form的三种提交方 ...
- wpf研究之道-datagrid控件(1)
"想要说些什么 又不知从何说起",每当想要写一些关于wpf的文章,总是沉思良久,怕自己写不好.今天我想要说的是wpf中datagrid控件.我们先来看看它在整个类的层次结构: ...
- ASP.NET Aries 入门开发教程7:DataGrid的行操作(主键操作区)
前言: 抓紧勤奋,再接再励,预计共10篇来结束这个系列. 上一篇介绍:ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑 本篇介绍主键操作区相关内容. 1:什么时候有默认的 ...
- JQuery easyUI DataGrid 创建复杂列表头(译)
» Create column groups in DataGrid The easyui DataGrid has ability to group columns, as the followin ...
- [systemtap手记]debian体系安装过程
Debian体系,本人测试用机 Ubuntu 11.10 uname -r 查看原本的内核版本为 3.0.0-12-generic 第一步: 安装systemtap包 $ sudo apt-get i ...
- BPM体系文件管理解决方案分享
一.方案概述 企业管理在很大程度上是通过文件化的形式表现出来,体系文件管理是管理体系存在的基础和证据,是规范企业管理活动和全体人员行为,达到管理目标的管理依据.对与公司质量.环境.职业健康安全等体系有 ...
随机推荐
- iOS开发中NSLog输出格式大全
本文的内容是总结了一下iOS开发中NSLog输出格式大全,虽然比较基础,但有总结毕竟会各位正在学习iOS开发的朋友们一些小小的帮助. %@ 对象 %d, %i ...
- MyEclipse基础配置
1.设置默认工作空间编码 window/preferences/general/workspace/Text file encoding 2.设置文件默认打开方式 xml建议设置 html建议设置 j ...
- win7 64+python2.7.12安装numpy+scipy+matplotlib+scikit-learn
python包下载网址 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 1.已经安装python2.7.12,查看scripts里是否有pip.2.7.9版本以上 ...
- 清除dns缓存
Linux清除dns缓存命令 /etc/init.d/dnsmasq restart
- ReactJs入门教程
现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领 ...
- sql注入过滤的公共方法
/// <summary> ///SQL注入过滤 /// </summary> /// <param name="InText">要过滤的字符串 ...
- Animation小问题整理
1.在动画播放中改变层级内容的名字,不会造成动画内容映射的改变. 2.Animator动画剪辑层级没问题,但是不播放 检查是否Mask损坏,FBX文件的Animations选项下面有个Mask.Uni ...
- 2016年江西理工大学C语言程序设计竞赛(初级组)
问题 A: 木棒根数 解法:把所有的情况保存下来,加一下就好 #include<bits/stdc++.h> using namespace std; map<char,int> ...
- 关于.net编译时目标生成平台
x86: 将程序集编译为由兼容 x86 的 32 位公共语言运行库运行. x64: 将程序集编译为由支持 AMD64 或 EM64T 指令集的计算机上的 64 位公共语言运行库运行. anycpu:( ...
- spark统计
http://www.myexception.cn/sql/2004512.html http://blog.csdn.net/ssw_1990/article/details/52220466 ht ...