Ztree + bootstarp-table 使用
Ztree + bootstarp-table 使用
一. Ztree
1.引入js/css文件
- <!--ztree-->
- <link rel="stylesheet" th:href="@{/common/jquery-ztree/3.5/css/default/zTreeStyle.css}">
- <link th:href="@{/common/jquery-ztree/3.5/css/metro/zTreeStyle.css}" rel="stylesheet"/>
- <script th:src="@{/common/jquery-ztree/3.5/js/jquery.ztree.core-3.5.js}"></script>
- <!--Jquery-->
- <script th:src="@{/js/jquery.js}"></script>
2.页面定义/html
- <div >
- <ul id="tree" class="ztree"></ul>
- </div>
3.页面初始化js
- $(function () {
- var setting = {
- view: {
- // fontCss : {"font-size":"26px","color":"red"}
- },
- check: {
- //开启jquery.ztree.excheck-3.5.js
- // enable: true,
- // chkStyle: "radio",
- // radioType: "radio"
- },
- edit: {
- /* enable: true,
- drag: {
- isCopy: true,
- isMove: false
- }*/
- },
- async: {
- enable: true,
- url: ctx + "user/getJsonData",//url地址
- type: 'post',
- autoParam: ["id"],
- },
- data: {
- simpleData: {
- enable: true,
- idKey: "id",
- pIdKey: "pId",
- rootPId: 0
- }
- },
- callback: {
- onClick: function (event, treeId, treeNode, clickFlag) {
- if (!treeNode.isParent) {
- // alert("treeId自动编号:" + treeNode.tId + ",节点id是:" + treeNode.id + ",节点文本是:" + treeNode.name) ;
- $("#input_hidden").attr("value", treeNode.name);
- // var input = $("#input_hidden").val();
- // alert(input);
- oTable.Init();
- }
- if (treeNode.isParent) {
- // alert("treeId自动编号:" + treeNode.tId + ",节点id是:" + treeNode.id + ",节点文本是:" + treeNode.name) ;
- $("#input_hidden").attr("value", treeNode.name);
- // var input = $("#input_hidden").val();
- // alert(input);
- oTable.Init();
- }
- },
- onAsyncError: zTreeOnAsyncError,
- onAsyncSuccess: function (event, treeId, treeNode, msg) {
- }
- }
- };
- function filter(treeId, parentNode, childNodes) {
- if (!childNodes) {
- return null;
- }
- for (var i = 0, l = childNodes.length; i < l; i++) {
- childNodes[i].name = childNodes[i].name.replace(/\.n/g, '.');
- }
- return childNodes;
- }
- function zTreeOnAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {
- alert("加载错误:" + XMLHttpRequest);
- }
- $(document).ready(function () {
- $.fn.zTree.init($("#tree"), setting);
- });
- })
4.controller 层
- /**
- * 提供Ztree数据
- * @author zhukaixin
- * @return java.util.List<com.example.cetcie8.user.pojo.TreeUser>
- * @throws
- */
- public List<TreeUser> getAllAuthorize() {
- List<TreeUser> list = new ArrayList(18);
- TreeUser treeUser1 = new TreeUser(121, 1, 1, "总公司", 1);
- TreeUser treeUser2 = new TreeUser(122, 121, 0, "北京公司", 1);
- TreeUser treeUser3 = new TreeUser(123, 121, 0, "上海公司", 1);
- TreeUser treeUser4 = new TreeUser(124, 121, 0, "广州公司", 1);
- TreeUser treeUser5 = new TreeUser(125, 121, 1, "中国公司", 1);
- TreeUser treeUser6 = new TreeUser(126, 125, 0, "中国北方公司", 1);
- TreeUser treeUser7 = new TreeUser(127, 121, 1, "上市公司", 1);
- TreeUser treeUser8 = new TreeUser(128, 127, 0, "北京上市分公司", 1);
- TreeUser treeUser9 = new TreeUser(129, 127, 0, "上海上市分公司", 1);
- TreeUser treeUser10 = new TreeUser(130, 121, 1, "香港公司", 1);
- TreeUser treeUser11 = new TreeUser(131, 130, 0, "九龙湾分公司", 1);
- TreeUser treeUser12 = new TreeUser(132, 130, 0, "台北分公司", 1);
- list.add(treeUser1);
- list.add(treeUser2);
- list.add(treeUser3);
- list.add(treeUser4);
- list.add(treeUser5);
- list.add(treeUser6);
- list.add(treeUser7);
- list.add(treeUser8);
- list.add(treeUser9);
- list.add(treeUser10);
- list.add(treeUser11);
- list.add(treeUser12);
- return list;
- }
- /**
- * 将Ztree数据封装成Json数据格式
- * @author zhukaixin
- * @return java.lang.String
- * @throws
- */
- @ResponseBody
- @PostMapping("/getJsonData")
- public String getJsonData() {
- List<TreeUser> list = getAllAuthorize();
- StringBuffer json = new StringBuffer("[");
- String data = "";
- int length = list.size();
- for (int i = 0; i < length; i++) {
- json.append("{id:" + list.get(i).getId() + ",");
- json.append("pId:" + list.get(i).getpId() + ",");
- json.append("name:\"" + list.get(i).getName() + "\",");
- if (list.get(i).getIsParent() != 0) {
- json.append("isParent:" + list.get(i).getIsParent() + ",");
- }
- if (list.get(i).getOpen() != 0) {
- json.append("open:" + list.get(i).getOpen() + ",");
- }
- data = json.substring(0, json.lastIndexOf(",")) + "},";
- json = new StringBuffer(data);
- }
- data = json.substring(0, json.length() - 1) + "]";
- // System.out.println(data);
- return data;
- }
5.页面直接根据返回的json 数据渲染Ztree
二 、bootStarp-table 整合 Ztree
1.主要就是点击左边的Ztree 节点 右边显示数据
2.完整的html代码
- <!DOCTYPE html>
- <html lang="zh" xmlns:th="http://www.thymeleaf.org">
- <head>
- <meta charset="UTF-8">
- <title>用户页面</title>
- <!--Jquery-->
- <script th:src="@{/js/jquery.js}"></script>
- <!--bootstrap-->
- <script th:src="@{/common/bootstrap/js/bootstrap.js}"></script>
- <link rel="stylesheet" th:href="@{/common/bootstrap/css/bootstrap.min.css}">
- <!--bootstrap-table-->
- <script th:src="@{/common/bootstrap-table/bootstrap-table.js}"></script>
- <link rel="stylesheet" th:href="@{/common/bootstrap-table/bootstrap-table.css}">
- <script th:src="@{/common/bootstrap-table/locale/bootstrap-table-zh-CN.js}"></script>
- <!--ztree-->
- <!--<link rel="stylesheet" th:href="@{/common/jquery-ztree/3.5/css/simple/zTreeStyle.css}">-->
- <link rel="stylesheet" th:href="@{/common/jquery-ztree/3.5/css/default/zTreeStyle.css}">
- <link th:href="@{/common/jquery-ztree/3.5/css/metro/zTreeStyle.css}" rel="stylesheet"/>
- <script th:src="@{/common/jquery-ztree/3.5/js/jquery.ztree.core-3.5.js}"></script>
- <script th:src="@{/common/jquery-ztree/3.5/js/jquery.ztree.excheck-3.5.js}"></script>
- <!--页面访问路径前缀-->
- <script th:inline="javascript"> var ctx = [[@{
- /}]]; </script>
- <style type="text/css">
- /*自定义的隔行换色*/
- #user_table tr:nth-child(even){
- background: #fafafa;
- }
- #user_table th{
- background: #efefef;
- }
- /*.select-table {
- background: #fff;
- border-radius: 6px;
- margin-top: 10px;
- padding-top: 5px;
- padding-right: 10px;
- padding-bottom: 13px;
- box-shadow: 1px 1px 3px rgba(0,0,0,.2);
- }*/
- /*.ui-layout-content{
- background: #fff;
- padding: 10px;
- !* position: relative; *!
- overflow: auto;
- border: 0;
- box-shadow: 1px 1px 3px rgba(0,0,0,.2);
- }*/
- .select-table {/**/
- background: #fff;
- border-radius: 6px;
- margin-top: 10px;
- padding-top: 5px;
- padding-bottom: 13px;
- box-shadow: 1px 1px 3px rgba(0,0,0,.2);
- }
- </style>
- </head>
- <body gray-bg style="width: 90%;">
- <div class="container-div ui-layout-center">
- <div class="row">
- <div class="col-sm-3 col-xs-4 ui-layout-content">
- <div style="margin-top: 40px;height: 80%;">
- <div style="margin:20px 10px 20px 20px">
- <div style="color: #333;border-bottom: 1px solid #8b8b8b;">
- <h3>组织机构</h3>
- </div>
- <div class="ui-layout-content">
- <ul id="tree" class="ztree"></ul>
- </div>
- <input type="hidden" value="总公司" id="input_hidden"/>
- </div>
- </div>
- </div>
- <div class="col-sm-9 col-xs-8">
- <div style="margin-top: 30px;">
- <h3 style="text-align: center">用户数据表格</h3>
- <div class="row">
- <div class="col-sm-11 select-table" style="margin: 40px 20px 60px 20px">
- <table id="user_table" style="cursor:pointer;"></table>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <script th:src="@{/js/user/user.js}"></script>
- </body>
- </html>
3.完整的js
- $(function () {
- //1.初始化Table
- var oTable = new TableInit();
- oTable.Init();
- var setting = {
- view: {
- // fontCss : {"font-size":"26px","color":"red"}
- },
- check: {
- //开启jquery.ztree.excheck-3.5.js
- // enable: true,
- // chkStyle: "radio",
- // radioType: "radio"
- },
- edit: {
- /* enable: true,
- drag: {
- isCopy: true,
- isMove: false
- }*/
- },
- async: {
- enable: true,
- url: ctx + "user/getJsonData",
- type: 'post',
- autoParam: ["id"],
- },
- data: {
- simpleData: {
- enable: true,
- idKey: "id",
- pIdKey: "pId",
- rootPId: 0
- }
- },
- callback: {
- onClick: function (event, treeId, treeNode, clickFlag) {
- if (!treeNode.isParent) {
- // alert("treeId自动编号:" + treeNode.tId + ",节点id是:" + treeNode.id + ",节点文本是:" + treeNode.name) ;
- $("#input_hidden").attr("value", treeNode.name);
- // var input = $("#input_hidden").val();
- // alert(input);
- oTable.Init();
- }
- if (treeNode.isParent) {
- // alert("treeId自动编号:" + treeNode.tId + ",节点id是:" + treeNode.id + ",节点文本是:" + treeNode.name) ;
- $("#input_hidden").attr("value", treeNode.name);
- // var input = $("#input_hidden").val();
- // alert(input);
- oTable.Init();
- }
- },
- onAsyncError: zTreeOnAsyncError,
- onAsyncSuccess: function (event, treeId, treeNode, msg) {
- }
- }
- };
- function filter(treeId, parentNode, childNodes) {
- if (!childNodes) {
- return null;
- }
- for (var i = 0, l = childNodes.length; i < l; i++) {
- childNodes[i].name = childNodes[i].name.replace(/\.n/g, '.');
- }
- return childNodes;
- }
- function zTreeOnAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {
- alert("加载错误:" + XMLHttpRequest);
- }
- $(document).ready(function () {
- $.fn.zTree.init($("#tree"), setting);
- });
- })
- var TableInit = function () {
- var oTableInit = new Object();
- //初始化Table
- oTableInit.Init = function () {
- $('#user_table').bootstrapTable('destroy');
- $('#user_table').bootstrapTable({
- url: ctx + "user/userData",//请求url
- method: 'post',//请求方式
- contentType: "application/x-www-form-urlencoded",//发送到服务器的数据编码类型
- sortOrder: "desc",
- striped: true, //是否显示行间隔色
- // striped: true, // 是否显示行间隔色
- pagination: true, // 是否分页
- sidePagination: "client",//分页方式:client客户端分页,server服务端分页(*)
- // showColumns: false, // 是否显示列的按钮
- // detailView: true, // 是否显示父子表
- // showExport: false, // 是否显示导出
- queryParams: queryParams,//传递参数(*)
- columns: [{
- checkbox: true
- },
- {
- title: '序号',// 可不加
- align: "center",
- formatter: function (value, row, index) {
- return index + 1;
- }
- },
- {
- field: 'userId',
- title: '用户编号',
- align: "center",
- },
- {
- field: 'username',
- title: '用户名',
- align: "center",
- },
- {
- field: 'groupname',
- title: '部门',
- align: "center",
- },
- {
- field: 'email',
- title: '邮箱',
- align: "center",
- },
- {
- field: 'telephone',
- title: '电话',
- align: "center",
- }],
- });
- };
- return oTableInit;
- };
- //得到查询的参数
- function queryParams(params) {
- var temp = { //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
- pageNum: Math.round((params.offset + params.limit) / params.limit),
- pageSize: params.limit,
- //树的名称
- input: $("#input_hidden").val(),
- };
- return temp;
- }
3.完整controller
- package com.example.cetcie8.user.controller;
- import com.example.cetcie8.user.pojo.TreeUser;
- import com.example.cetcie8.user.pojo.User;
- import java.util.ArrayList;
- import java.util.List;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.ResponseBody;
- /**
- * Description:
- *
- * @Author: zhukaixin
- */
- @Controller
- @RequestMapping("/user")
- public class UserController {
- @GetMapping()
- public String view() {
- return "bi/user/userData";
- }
- @GetMapping("users")
- public String view1() {
- return "bi/user/user";
- }
- @PostMapping("/userData")
- @ResponseBody
- public List<User> userData(String input) {
- List list = new ArrayList(18);
- /* for (int i = 1; i <= 10; i++) {
- User user = new User(i,"用户"+i,"部门"+i,"123456789@qq.com","1881234563"+i);
- list.add(user);
- }*/
- //input = "总公司";
- if (input.equals("总公司")) {
- for (int i = 1; i <= 20; i++) {
- User user = new User(i, "用户" + i, "部门" + i, "123456789@qq.com", "1881234563" + i);
- list.add(user);
- }
- } else if (input.equals("北京公司") || input.equals("上海公司") || input.equals("广州公司")) {
- for (int i = 1; i <= 6; i++) {
- User user = new User(i, "用户" + i, "部门" + i, "123456789@qq.com", "1881234563" + i);
- list.add(user);
- }
- } else {
- for (int i = 2; i <= 6; i++) {
- User user = new User(i, "用户" + i, "部门" + i, "123456789@qq.com", "1881234563" + i);
- list.add(user);
- }
- }
- return list;
- }
- /**
- * 将Ztree数据封装成Json数据格式
- * @author zhukaixin
- * @return java.lang.String
- * @throws
- */
- @ResponseBody
- @PostMapping("/getJsonData")
- public String getJsonData() {
- List<TreeUser> list = getAllAuthorize();
- StringBuffer json = new StringBuffer("[");
- String data = "";
- int length = list.size();
- for (int i = 0; i < length; i++) {
- json.append("{id:" + list.get(i).getId() + ",");
- json.append("pId:" + list.get(i).getpId() + ",");
- json.append("name:\"" + list.get(i).getName() + "\",");
- if (list.get(i).getIsParent() != 0) {
- json.append("isParent:" + list.get(i).getIsParent() + ",");
- }
- if (list.get(i).getOpen() != 0) {
- json.append("open:" + list.get(i).getOpen() + ",");
- }
- data = json.substring(0, json.lastIndexOf(",")) + "},";
- json = new StringBuffer(data);
- }
- data = json.substring(0, json.length() - 1) + "]";
- // System.out.println(data);
- return data;
- }
- /**
- * 提供Ztree数据
- * @author zhukaixin
- * @return java.util.List<com.example.cetcie8.user.pojo.TreeUser>
- * @throws
- */
- public List<TreeUser> getAllAuthorize() {
- List<TreeUser> list = new ArrayList(18);
- TreeUser treeUser1 = new TreeUser(121, 1, 1, "总公司", 1);
- TreeUser treeUser2 = new TreeUser(122, 121, 0, "北京公司", 1);
- TreeUser treeUser3 = new TreeUser(123, 121, 0, "上海公司", 1);
- TreeUser treeUser4 = new TreeUser(124, 121, 0, "广州公司", 1);
- TreeUser treeUser5 = new TreeUser(125, 121, 1, "中国公司", 1);
- TreeUser treeUser6 = new TreeUser(126, 125, 0, "中国北方公司", 1);
- TreeUser treeUser7 = new TreeUser(127, 121, 1, "上市公司", 1);
- TreeUser treeUser8 = new TreeUser(128, 127, 0, "北京上市分公司", 1);
- TreeUser treeUser9 = new TreeUser(129, 127, 0, "上海上市分公司", 1);
- TreeUser treeUser10 = new TreeUser(130, 121, 1, "香港公司", 1);
- TreeUser treeUser11 = new TreeUser(131, 130, 0, "九龙湾分公司", 1);
- TreeUser treeUser12 = new TreeUser(132, 130, 0, "台北分公司", 1);
- list.add(treeUser1);
- list.add(treeUser2);
- list.add(treeUser3);
- list.add(treeUser4);
- list.add(treeUser5);
- list.add(treeUser6);
- list.add(treeUser7);
- list.add(treeUser8);
- list.add(treeUser9);
- list.add(treeUser10);
- list.add(treeUser11);
- list.add(treeUser12);
- return list;
- }
- }
4.Pojo
- package com.example.cetcie8.user.pojo;
- /**
- * Description:
- *
- * @Author: zhukaixin
- */
- public class User {
- //用户编号
- private int userId;
- //用户名
- private String username;
- //部门
- private String groupname;
- //邮箱
- private String email;
- //电话
- private String telephone;
- @Override
- public String toString() {
- return "User{" +
- "userId=" + userId +
- ", username='" + username + '\'' +
- ", groupname='" + groupname + '\'' +
- ", email='" + email + '\'' +
- ", telephone='" + telephone + '\'' +
- '}';
- }
- public User(int userId, String username, String groupname, String email, String telephone) {
- this.userId = userId;
- this.username = username;
- this.groupname = groupname;
- this.email = email;
- this.telephone = telephone;
- }
- public void setUserId(int userId) {
- this.userId = userId;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public void setGroupname(String groupname) {
- this.groupname = groupname;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- public void setTelephone(String telephone) {
- this.telephone = telephone;
- }
- public int getUserId() {
- return userId;
- }
- public String getUsername() {
- return username;
- }
- public String getGroupname() {
- return groupname;
- }
- public String getEmail() {
- return email;
- }
- public String getTelephone() {
- return telephone;
- }
- }
- package com.example.cetcie8.user.pojo;
- /**
- * Description:
- *
- * @Author: zhukaixin
- */
- public class TreeUser {
- private int id ;
- private int pId ;
- private int isParent ;
- private String name ;
- private int open ;
- public TreeUser(int id, int pId, int isParent, String name, int open) {
- this.id = id;
- this.pId = pId;
- this.isParent = isParent;
- this.name = name;
- this.open = open;
- }
- @Override
- public String toString() {
- return "TreeUser{" +
- "id=" + id +
- ", pId=" + pId +
- ", isParent=" + isParent +
- ", name='" + name + '\'' +
- ", open=" + open +
- '}';
- }
- public void setId(int id) {
- this.id = id;
- }
- public void setpId(int pId) {
- this.pId = pId;
- }
- public void setIsParent(int isParent) {
- this.isParent = isParent;
- }
- public void setName(String name) {
- this.name = name;
- }
- public void setOpen(int open) {
- this.open = open;
- }
- public int getId() {
- return id;
- }
- public int getpId() {
- return pId;
- }
- public int getIsParent() {
- return isParent;
- }
- public String getName() {
- return name;
- }
- public int getOpen() {
- return open;
- }
- }
Ztree + bootstarp-table 使用的更多相关文章
- 关于Bootstrap table的回调onLoadSuccess()和onPostBody()使用小结
关于Bootstrap table的回调onLoadSuccess()和onPostBody()使用小结 Bootstrap table 是一款基于 Bootstrap 的 jQuery 表格插件, ...
- ztree-demo
<!DOCTYPE html><HTML><HEAD> <TITLE> ZTREE DEMO - Async</TITLE> <met ...
- bootstrap-table 列拖动
1.页面js/css <!-- bootstrap 插件样式 --> <link th:href="@{/common/bootstrap-3.3.6/css/bootst ...
- zTree 循环树
/// <summary> /// 初始化第一次节点加载 /// </summary> /// protected string _menu = string.Empty; p ...
- zTree的功能解析
zTree ,一个依靠 jQuery 实现的多功能 "树插件".优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点.兼容 IE.FireFox.Chrome 等浏览器, ...
- zTree的使用2
前台代码: @using Models; @{ Layout = "~/Views/Shared/_Layout.cshtml"; } <link type="te ...
- web 前端常用组件【05】ZTree
web 项目或多或少都会有涉及到什么人员职称树,菜单树,组织机构树等. 历手三四个项目有大有小,采用的树前端都是 Ztree. 有些优秀的J2EE 框架将这些常用的组件都封装起来,作为模块化的组件提供 ...
- 利用ZTree链接数据库实现 [权限管理]
最近想研究权限管理,看群里有人发了ZTrees模板,我看了下,觉得笔easyUI操作起来更灵活些,于是就开始研究了. 刚开始从网上找了找了个Demo,当然这个并没有实现权限啥的,但实现了前台调用Aja ...
- bootstarp 样式细节(tooltip布局)
在写bootstarp中发现的几个小样式问题,记录以后可能用的到 1.有时候我们想要超过td长度后自动显示省略号,我们会使用 table { table-layout: fixed; } table ...
- 从头开始一步一步实现EF6+Autofac+MVC5+Bootstarp极简前后台ajax表格展示及分页(二)前端修改、添加表格行点击弹出模态框
在前一篇中,由于不懂jquery,前端做的太差了,今天做稍做修改,增加一个跳转到指定页面功能,表格行点击样式变化.并且在表格中加入bootstarp的按钮组,按钮点击后弹出模态框,须修改common, ...
随机推荐
- 使用Docker搭建HttpRunnerManager环境
建立一个HttpRunnerManager的环境需要Mysql,RabbitMQ服务,为简单部署,全部使用Docker 1. 在服务器建立Docker环境 2.建立Mysql容器 docker run ...
- 表演的艺术,妖尾回合制战斗系统客户端设计[Unity]
妖尾历经几年开发,终于在今年6月底顺利上线,笔者从2017年初参与开发,主要负责妖尾战斗系统开发.战斗作为游戏的核心玩法系统,涉及很多技术点,希望能借几篇文字,系统性总结MMORPG战斗系统的开发经验 ...
- HBase的java操作,最新API。(查询指定行、列、插入数据等)
关于HBase环境搭建和HBase的原理架构,请见笔者相关博客. 1.HBase对java有着较优秀的支持,本文将介绍如何使用java操作Hbase. 首先是pom依赖: <dependency ...
- javascript判断mp3是否播放完
javascript判断mp3是否播放完 var audio=document.getElementById('audio'); if(audio){ audio.loop = false; audi ...
- python小项目(python实现鉴黄)源码
import sys import os import _io from collections import namedtuple from PIL import Image class Nude( ...
- Python自定义注解
Python3.0之后加入新特性Decorators,以@为标记修饰function和class.有点类似c++的宏和java的注解.Decorators用以修饰约束function和class,分为 ...
- Visual Studio 定制模板类---详细步骤
1.先定义一个类文件,将要定义的信息写入类文件 比如我每次写一个命令都是这个套路,要继承接口,要写上相应的特性,每次都 是重复的工作: 2.提取类模板 项目=>导出模板 这里你可以导出项目模板和 ...
- MySQL for OPS 01:简介 / 安装初始化 / 用户授权管理
写在前面的话 取这个标题的目的很简单,MySQL 在中小型企业中一般都是由运维来维护的,除非数据很重要的公司可能会聘请 DBA. 但是运维一般存在由于所需要了解的东西很多很杂,导致学习过程中很多东西只 ...
- Asp.Net或WebAPI获取表单数据流(批量文件上传)
//Web或WebAPI获取表单数据流(批量文件上传) public JsonResult UploadFile() { //HttpPostedFi ...
- SQL Server 跨服务器、跨版本使用复制 (2008、2012)
在两台不同的服务器间实现SQL Server 的发布和订阅,需要一些设置. 测试环境:2008数据库.2012数据库,可实现跨版本发布订阅 本次测试是08的数据库做发布端 ,使用08数据及12数据库均 ...