批量新增的操做功能与步骤

不负遇见。。。 2019-06-17 08:15:23
今天跟大家讲一下新增,平时讲的新增都是单条数据的新增或者修改。大家可以想一下可不可以批量新增呢?把存在Excel表格批量下载导入到数据库中。是可以的。只是步骤多了一些。没有直接新增单条数据那么快那么简单,过程稍微繁琐一点。
一、 我刚好最近做了一个批量新增操做。具体步骤如下:
二、准备好一个批量导入的模态窗体,在通过点击批量选择打开模态窗体。模态窗体如下:
如图:
[


在这里模态窗体我主要运用了bookstart4 来进行搭建,我就不把代码粘贴出来,大家可以自已去搭建一个。这里面有两个按钮,下载模板与导入到数据库中,导入到数据库相信大家都可以理解,为什么下载模板呢?主要是为了格式的规范性。要和原来的数据格式相对应。
还有一个类似于按钮那样的选择文件的框框。这个是通过input标签,只有input 才有选择文件这个功能
重点:我们在点击选取文件的时候。并不是一下子就显示出来的
它有好几个步骤:
例如:点击文件——value值发生变化—把选取的文件(Excel表格)放进控制器的一个方法中读取——放置到Session中,在从Session中把数据的查询出来———最后绑定到表格-----再新增到数据库中。
第一步:value值发生变化操作 要到控制器写相对应的代码读取文件
// 表单Excel 的数据 读取数据在放置在session中

public ActionResult ImportExcel(HttpPostedFileBase file)//显示数据
{
ReturnJson msg = new ReturnJson();
try
{
//获取文件的扩展名称
string fileExtension = Path.GetExtension(file.FileName).ToLower();
if (".xls".Equals(fileExtension))
{
//定义二进制数组 ContentLength 指定数组的长度
byte[] fileBytes = new byte[file.ContentLength];//定义二进制数组
//把文件读取到二进制数组中 Read 读取
file.InputStream.Read(fileBytes, 0, file.ContentLength);//读取文件内容
//判断是否为空 ExcelReader 工具类读取数据 封装类读取数据 HasData 判断数据是否为空
if (ExcelReader.HasData(new MemoryStream(fileBytes)))
{//有数据进行数据的读取 导入名称 根据名称查询ID值 拿名称去tbFloor 找
List<PW_Floor> tbFloor = myModel.PW_Floor.ToList();
List<PW_DestState> tbDestState = myModel.PW_DestState.ToList();
List<PW_DepartmentSet> tbDepartmentSet = myModel.PW_DepartmentSet.ToList();
List<TableSet> listDesk = new List<TableSet>();
//读取数据 把二进制数组转换为二进制数组 转换为 DataTable 的类型
DataTable dtexcel = ExcelReader.RenderFromExcel(new MemoryStream(fileBytes), 0, 0);
foreach (DataRow row in dtexcel.Rows)//一行行的读取数据 获取行再去读取列
{
TableSet Desk = new TableSet(); //创建对象
try
{
//楼层 获取表格的ID值
Desk.FloorID = tbFloor.Where(m => m.FloorName == row["楼层"].ToString().Trim()).SingleOrDefault().FloorID;
Desk.FloorName = row["楼层"].ToString().Trim();
//桌子状态
Desk.DeskStateID = tbDestState.Where(m => m.DeskState == row["状态"].ToString().Trim()).SingleOrDefault().DeskStateID;
Desk.DeskState = row["状态"].ToString().Trim();
//Desk.DepartmentSetID = tbDepartmentSet.Where(m => m.DepartmentName == row["部门"].ToString().Trim()).SingleOrDefault().DepartmentSetID;
//Desk.DepartmentName = row["部门"].ToString().Trim();
// 部门
Desk.DepartmentSetID = tbDepartmentSet.Where(m => m.DepartmentName == row["部门"].ToString().Trim()).SingleOrDefault().DepartmentSetID;
Desk.DepartmentName = row["部门"].ToString().Trim();

Desk.DeskNumber = row["桌号"].ToString().Trim();//桌号
Desk.DeskName = row["桌名"].ToString().Trim();

Desk.AccommodatePeople = row["容纳人数"].ToString().Trim();
Desk.Remark = row["备注"].ToString().Trim();
listDesk.Add(Desk);//添加 获取完把数据放进去listDesk 列表
}
catch (Exception e)
{
Console.WriteLine(e);
msg.Text = "表格数据读取异常!";
}
}
msg.State = true;
msg.Text = "数据读取成功";
//为了方便再其他方法调出来用或者查询 把数据放再session
Session["ExcelFile"] = listDesk;
}
else
{
msg.Text = "该Excel 文件为空";
}
}
}
catch (Exception e)
{
Console.Write(e);
msg.Text = "数据异常!";
}
return Json(msg, JsonRequestBehavior.AllowGet);
}

第二步:读取数据成功 要进行查询session 对他的数进行查询出来。数据才会在表格中显示出来



//查询数据 Session
public ActionResult SelectHouse(LayuiTablePage layuiTablePage)
{//(LayuiTablePage layuiTablePage)
//捕获异常 从session 中取数据

try
{
List<TableSet> listDesk = new List<TableSet>();
//判断session不为空操作
if (Session["ExcelFile"] != null)
{
listDesk = Session["ExcelFile"] as List<TableSet>;//as 相当与转换
}
int totalRow = listDesk.Count();
listDesk = listDesk.OrderBy(m => m.DeskID).
Skip(layuiTablePage.GetStartIndex()).
Take(layuiTablePage.limit).ToList();
LayuiTableData<TableSet> layuiTableData = new LayuiTableData<TableSet>()
{
count = totalRow,
data = listDesk

};
return Json(layuiTableData, JsonRequestBehavior.AllowGet);
}

catch (Exception e)
{
Console.WriteLine(e);
return Json("", JsonRequestBehavior.AllowGet);
}
}
表格数据显示
如图:


第三步:将Excel的数据表格导入到数据库(一个新增的过程) 在session 取数据
public ActionResult InsertDeskH()
{
ReturnJson msg = new ReturnJson();
int savedCount = 0;//保存成功的数据
int oldCount = 0;// 已经存在的数据条数
//从seeion取数据 声明一个集合
List<TableSet> listDesk = new List<TableSet>();

if (Session["ExcelFile"] != null)
{
//第四部赋值给liststudent
listDesk = Session["ExcelFile"] as List<TableSet>;
}
//判断值不为空操作
if (listDesk != null)
{
//循环遍历集合
foreach (TableSet Desk in listDesk)
{
//查询以前的数据 是否存在
int count = (from tbDeskSurface in myModel.SYS_DeskSurface
where tbDeskSurface.DeskNumber == Desk.DeskNumber
select tbDeskSurface).Count();
//数据为空
if (count == 0) //桌子不为空
{
//保存Desk
SYS_DeskSurface tbDesk = new SYS_DeskSurface();
tbDesk.DeskNumber = Desk.DeskNumber;
tbDesk.DeskName = Desk.DeskName;
tbDesk.AccommodatePeople = Desk.AccommodatePeople;
tbDesk.Remark = Desk.Remark;
tbDesk.FloorID = Desk.FloorID;
tbDesk.DeskStateID = Desk.DeskStateID;
tbDesk.DepartmentSetID = Desk.DepartmentSetID;

myModel.SYS_DeskSurface.Add(tbDesk);
savedCount += myModel.SaveChanges(); //保存成功
//三目运算 上面等价于下面
//savedCount =savedCount +myModel.SaveChanges();
}
else
{
oldCount++;
}
}
msg.State = true;
msg.Text = "导入" + listDesk.Count +
"条数据,存在的数据有" + oldCount
+ "条,成功保存了" + savedCount + "条数据到数据库";
}
else
{
msg.Text = "数据为空!";
}
return Json(msg, JsonRequestBehavior.AllowGet);
}
最后结果如下。我只导入了两条数据:
注意:在这里我这里设置部门和状态都是独立一张表(数据也是已经存在的),他们有自已的ID ,所以填写数据的时候该是“快餐部”就是快餐部,多字少字都会造成数据为空


以上这些主要是控制里面的代码。至于页面如何去提交。我就不多写了。
例如:1、页面打开新增模态窗体,要对数据进行清空操作,
2、提交数据的时候要注意路径与数据之间的传递。
重点注意:上面我说的步骤。点击文件,数据不是一下子出来的,有几个步骤。大家掌握即可。
批量新增的内容解说就这么多,希望会对你有所帮助或者提示,不足之处多多包涵


...全文
68 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

488

社区成员

发帖
与我相关
我的任务
社区描述
硬件使用 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧