写在前面


上一小节,我们总结了根据Id查询多表数据,最后返回Json对象给前台的例子。接下来,在这一小节我们要实现多表编辑的操作。

实践步骤


因为上一小节以及创建了Edit视图以及数据的显示。所以,在这里不在重复。主要介绍实现多表编辑的操作。

1.在BorrowBookController控制器中,创建 Edits_Op 方法 实现数据的编辑

/// <summary>
/// 多表编辑
/// </summary>
/// <param name="Jsons">前台接收参数</param>
/// <returns>成功返回1,失败返回0</returns>
public int Edits_Op(sys_Book_Type Jsons)
{
int result = 0;
var para = new List<Tuple<string, object>>();
Tuple<string, object> temp1;
var id = Jsons.book_Type_id;
//表1数据
sys_Book_Type bty = new sys_Book_Type { };
bty.book_Type_id = id;
bty.book_Type_Name = Jsons.book_Type_Name;
bty.book_Type_Des = Jsons.book_Type_Des;
bty.create_Time = DateTime.Now;
//表2数据
var Jsonbook = Jsons.books;
List<sys_Borrow_Book> listbooks = new List<sys_Borrow_Book> { };
foreach (var item in Jsonbook)
{
sys_Borrow_Book bk = new sys_Borrow_Book();
bk.book_Id = item.book_Id;
bk.book_Num = item.book_Name;
bk.book_Name = item.book_Name;
bk.book_Desc = item.book_Desc;
bk.borow_Time = DateTime.Now;
bk.book_Type_id = id;
bk.user_Id = "ba33a34eb98411e9870700155d08c915";
listbooks.Add(bk);
} string sql_bookty = "update sys_Book_Type set book_Type_Name=?book_Type_Name,book_Type_Des=?book_Type_Des, ";
sql_bookty += "create_Time=?create_Time where book_Type_id=?book_Type_id";
temp1 = new Tuple<string, object>(sql_bookty, bty);
para.Add(temp1);
string sql_book = "update sys_Borrow_Book set book_Num=?book_Num,book_Name=?book_Name,";
sql_book += " book_Desc=?book_Desc,borow_Time=?borow_Time,book_Type_id=?book_Type_id,user_Id=?book_Type_id ";
sql_book += " where book_Id=?book_Id ";
temp1 = new Tuple<string, object>(sql_book, listbooks);
para.Add(temp1);
result = DapperDBContext.ExecuteTransaction(para).Item1;
if(result==true){result=1;}
return result;
}

2.在Edit视图中 创建 Edit视图

<div class="layui-container">
<div class="layui-col-md12">
<h2 style="margin-top:10px;">编辑</h2>
<hr class="layui-bg-green">
<div class="layui-form " style="padding:20px;margin:10px 10px 10px 10px;border:1px solid #ddd;" id="" >
<div class="layui-form-item">
<label class="layui-form-label">书类型名称</label>
<div class="layui-input-block">
<input type="text" id="book_Type_Id" style="display:none;">
<input type="text" name="book_Type_Name" id="book_Type_Name" placeholder="请输入标题" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">书类型描述</label>
<div class="layui-input-block">
<textarea class="layui-textarea" name="book_Type_Des" id="book_Type_Des" placeholder="请输入书籍类型描述"></textarea>
</div>
</div>
</div>
<div class="layui-form layui-form-pane" style="padding:20px;margin:10px 10px 10px 10px;border:1px solid #ddd;" id="" lay-filter="">
<button class="layui-btn layui-btn-sm" id="btnAddRow">新增</button>
<table class="layui-table" id="tab">
<tr>
<th>借书编号</th>
<th>书名</th>
<th>书简介</th>
<th>操作</th>
</tr>
<tr class="list">
<td><input type="text" name="book_Num" class="layui-input" /></td>
<td><input type="text" name="book_Name" class="layui-input" /></td>
<td><input type="text" name="book_Desc" class="layui-input" /></td>
<td><button class="layui-btn layui-btn-danger layui-btn-sm btnDelRow">删除</button></td>
</tr>
</table>
</div>
<div style="width:144px;margin:0 auto">
<div style="width:144px;margin:0 auto;">
<button class="layui-btn layui-btn-normal" id="btnSave">保存</button>
<button class="layui-btn layui-btn-primary" id="btnCancel">取消</button>
</div>
</div>
</div>
</div>

3.在Edit视图中 操作dom

<script type="text/javascript">
$(function () {
$("#btnSave").click(function () {
var bookType = {
book_Type_Id: "" + $("#book_Type_Id").val() + "",
book_Type_Name: "" + $("#book_Type_Name").val() + "",
book_Type_Des: "" + $("#book_Type_Des").val() + "",
books: []
};
var tr = $("#tab tr:gt(0)");
for (var i = 0; i < tr.length; i++) {
var td = $(tr[i]);
var id = td.children().children().attr("id");
var aa = td.children().children().val();
var bb = td.children().next().children().val();
var cc = td.children().next().next().children().val();
bookType.books.push({ book_Id: id, book_Num: "" + aa + "", book_Name: "" + bb + "", book_Desc: "" + cc + "" });
}
$.ajax({
url: "../BorrowBook/Edits_Op",
type: "post",
dataType: "json",
contentType: "application/json",
data: JSON.stringify(bookType)
}).done(function (msg) {
alert(msg);
if (msg == 0) {
parent.layer.msg("保存成功!", { icon: 1 });
var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
parent.layer.close(index); //再执行关闭
}
else {
parent.layer.msg("保存失败!", { icon: 2 });
return;
}
}).fail(function (e) { });
});
});
</script>

注意:

此刻我们会发现,执行Edits_Op的方法只能编辑原来有的数据,而无法通过点击增行来编辑数据的。所以,我们对Edits_Op这个方法进行改造一下。如果要实现编辑的同时也可以添加数据。我们就必须先获取到两张表中有联系的Id。在操作时先删除表,然后再往里面查询编辑好的数据。我称之为变相的编辑。

4.重构Edits_Op方法

/// <summary>
/// 多表编辑
/// </summary>
/// <param name="Jsons">前台接收参数</param>
/// <returns>成功返回1,失败返回0</returns>
public int Edits_Op(sys_Book_Type Jsons)
{
int result = 0;
var para = new List<Tuple<string, object>>();
Tuple<string, object> temp1; var Id = Guid.NewGuid().ToString();
sys_Book_Type bty = new sys_Book_Type { };
bty.book_Type_id = Id;
bty.book_Type_Name = Jsons.book_Type_Name;
bty.book_Type_Des = Jsons.book_Type_Des;
bty.create_Time = DateTime.Now;
//表2数据
var Jsonbook = Jsons.books;
List<sys_Borrow_Book> listbooks = new List<sys_Borrow_Book> { };
foreach (var item in Jsonbook)
{
sys_Borrow_Book bk = new sys_Borrow_Book();
bk.book_Id = Guid.NewGuid().ToString();
bk.book_Num = item.book_Num;
bk.book_Name = item.book_Name;
bk.book_Desc = item.book_Desc;
bk.borow_Time = DateTime.Now;
bk.book_Type_id = Id;
bk.user_Id = "ba33a34eb98411e9870700155d08c915";
listbooks.Add(bk);
}
string sql_del = "delete from sys_Book_Type where book_Type_id=?id";
string sql_dels = "delete from sys_Borrow_Book where book_Type_id=?id"; string sql_bookty = "insert into sys_Book_Type(book_Type_id,book_Type_Name,book_Type_Des,create_Time)";
sql_bookty += " values (?book_Type_id,?book_Type_Name,?book_Type_Des,?create_Time)"; string sql_book = "insert into sys_Borrow_Book(book_Id,book_Num,book_Name,book_Desc,borow_Time,book_Type_id,user_Id)";
sql_book += " values (?book_Id,?book_Num,?book_Name,?book_Desc,?borow_Time,?book_Type_id,?user_Id)"; DynamicParameters p1 = new DynamicParameters();
p1.Add("?Id", Jsons.book_Type_id);
temp1 = new Tuple<string, object>(sql_del, p1);
para.Add(temp1);
temp1 = new Tuple<string, object>(sql_dels, p1);
para.Add(temp1);
temp1 = new Tuple<string, object>(sql_bookty, bty);
para.Add(temp1);
temp1 = new Tuple<string, object>(sql_book, listbooks);
para.Add(temp1);
bool boolresult = DapperDBContext.ExecuteTransaction(para).Item1;
if (boolresult == true) { result = 1; }
return result;
}

最终效果:





.net Dapper 实践系列(5) ---事务编辑(Layui+Ajax+Dapper+MySQL)的更多相关文章

  1. .net Dapper 实践系列(6) ---事务删除(Layui+Ajax+Dapper+MySQL)

    目录 写在前面 实现步骤 写在最后 写在前面 上一小节,总结了事务多表更新的两种方法.一个是只更新原来的数据,一个是先删除原来的数据再往里面添加新的数据.而这一小节,说的是事务的多表删除. 实现步骤 ...

  2. .net Dapper 实践系列(2) ---事务添加(Layui+Ajax+Dapper+MySQL)

    目录 写在前面 问题描述 解决方法 具体实现 写在前面 前面我们已经搭建好了项目,这一小节我们使用Dapper 中的事务实现一对多的添加操作. 问题描述 在做添加的时候很头疼需要从页面传递一组数据到后 ...

  3. .net Dapper 实践系列(1) ---项目搭建(Layui+Ajax+Dapper+MySQL)

    目录 写在前面 一.前期准备 1.在MySQL创建数据库 2.创建项目 3.安装程序包 4.添加插件 5.添加DbOption文件夹 6.添加实体类 写在前面 学习并实践使用Dapper 这个小型的O ...

  4. .net Dapper 实践系列(4) ---数据查询(Layui+Ajax+Dapper+MySQL)

    写在前面 上一小节,总结了数据显示时,会出现的日期问题.以及如何处理格式化日期.这个小节,主要总结的是使用Dapper 中的QueryMultiple方法依次显示查询多表的数据. 实践步骤 1.在Bo ...

  5. .net Dapper 实践系列(3) ---数据显示(Layui+Ajax+Dapper+MySQL)

    目录 写在前面 产生问题 解决方案 写在前面 上一小节,我们使用Dapper 里事务实现了一对多关系的添加.这一小节,主要记录如何使用Dapper 实现多表的查询显示. 产生问题 在mvc控制器中查询 ...

  6. .net Dapper 学习系列(2) ---Dapper进阶

    目录 写在前面 前期准备 Dapper 单表批量添加 在Dapper 多表查询 在Dapper 调用存储过程 在Dapper 使用QueryMultiple进行多表查询 在Dapper 使用事务进行多 ...

  7. 微软云平台媒体服务实践系列 2- 使用动态封装为iOS, Android , Windows 等多平台提供视频点播(VoD)方案

    文章微软云平台媒体服务实践系列 1- 使用静态封装为iOS, Android 设备实现点播(VoD)方案  介绍了如何针对少数iOS, Android 客户端的场景,出于节约成本的目的使用媒体服务的静 ...

  8. .net core实践系列之短信服务-架构设计

    前言 上篇<.net core实践系列之短信服务-为什么选择.net core(开篇)>简单的介绍了(水了一篇).net core.这次针对短信服务的架构设计和技术栈的简析. 源码地址:h ...

  9. OpenStack实践系列⑧可视化服务Horizon之Dashboard演示

    OpenStack实践系列⑧可视化服务Horizon之Dashboard演示 七.可视化服务Horizon之Dashboard演示 仪表板依赖于功能核心服务,包括身份,图像服务,计算和网络两种(neu ...

随机推荐

  1. Linux下源码编译Mysql5.7

    1.安装依赖包 yum -y install gcc-c++ ncurses-devel cmake make perl gcc autoconf automake zlib libxml libgc ...

  2. Java IO全面

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10857412.html 一:IO流梳理——字符流.字节流.输入流.输出流 见另一篇博文:https://ww ...

  3. SpringCloud2.0 Hystrix Feign 基于Feign实现断路器

    原文:https://www.cnblogs.com/songlu/p/9968953.html 1.启动[服务中心]集群,工程名:springcloud-eureka-server 参考 Sprin ...

  4. np.random 系列函数

    1 random()   # 产生区间 [0, 1) 均匀分布的浮点数样本值 np.random.seed(42) 2 rand(d0, d1, ..., dn)    # 产生区间 [0, 1) 均 ...

  5. for each 语句

    for each 语句是java5新增,在遍历数组.集合的时候,for each拥有不错的性能. for each 虽然能遍历数组或者集合,但是只能用来遍历,无法在遍历的过程中对数组或者集合进行修改. ...

  6. JMeter5.1开发http协议接口之form表单脚本

    get请求--jmeter:form表单 下载文件 响应结果 post请求--jmeter:form表单 登录请求 响应结果 post请求--jmeter:form表单中传token 请求(token ...

  7. opencart 3伪静态seo url设置教程

    opencart 3已经为我们做好了url伪静态功能,我们只要做一些简单的设置就能实现seo url,首先开启伪静态功能,看看文件.htaccess事发后有存在如下规则,如果没有需要先添加下面的代码 ...

  8. 02-赵志勇机器学习-Logistics_Regression-test(转载)

    # coding:UTF-8 ''' Date:20160901 @author: zhaozhiyong ''' import numpy as np from lr_train import si ...

  9. Excel-自定义单元格、填充柄

    数据分析是指用适当的统计分析方法对收集来的大量数据进行分析, 提取有用信息和形成结论而对数据加以详细研究和概括总结的过程. 工具:EXCEL,sql,SAS,SPSS,R,Python.Hadoop. ...

  10. 用ant.design的设计注意点---表单

    设计的时候,输入表单项 最好放在一起,不要散落在页面各处,会导致表单项穿插存储数据,穿插验证表单,表单的样式设计要严格按照ant的版来,因为表单是交互最多最容易出错的地方,否则浪费太多工作量 持续集成 ...