关于导入EXCEL和AJAX
在一个项目当中,从顶部做到的底部,我了解到了关于以前一些不能理解的东西的合理解释。对于我们所处的这个项目,总体是基于.net和SQL开发的一种后 台管理模式。其中最为复杂的不是代码,而且流程的合理性,教师的思维不等同于我们这些计算机的人,具有良好的思维能力和逻辑能力。因此美工的图纸一定要在 简约和简单中入手,不仅仅要体现了教师员工的审美,而且还要考虑到其价值的可用性。.net是一种很好的开发环境,对于一个前端开发人员,基本可以认为是 首先的开发软件,而一个项目的初级成型,基本上可以认为是管理者,后台者和前端美工者的相互合作,无论对何项目而言,这三者是必不可分的,在与用户商谈过 程中,这点是必不可少的,缺美工者页面的风格和逻辑性不能达到用户的满意,而美工的人则就是人们所说的皮肤,而后台代码则相当于内脏,对于大多数用户而 言,内脏的复杂程度和如何形成的是其不感兴趣的一方面,而外皮确实他们所能接受这个网页的基本准则,所以针对不同的人,要有不同的设计思路。而不是一个思 路下来。而后台人员要一直和用户商协谈数据表的基本组成和逻辑思维。如果通过第三方转述的话,会大大折扣的。前端人员和后台人员是不能分割的,而前端人员 和美工人员也是相关的。所以三者可以说各有关。故不可分开而谈。这次的项目也面临着一些弯路,数据库的更改。所以以后的和用户商谈中一定要有所准备。
废话不说了,这次的项目中,最重要的就是人员数据的导入以及判断,对于数据库本身不存在的人员而言,导入新人员的方法有两种,一种是单人导入,可以按照 ‘姓名’,‘金额’,‘学号’,‘备注’等字段单人添加。而另一方面则是导入EXCEL,这也是我想要记录的语言,我们所用的导入EXCEL是一种将数据 暂时存在与页面中而不是存放在数据库中,在人员的数据还没有完全符合之前,是不会将人员的数据存放于数据库中,一开始我是准备放入一张临时表中,但是这样 的话对临时表的需求就比较多。故最后就放于页面中,而页面的数据在点击一个服务器控件如:botton等,会自动的刷新页面,而这样的话会使页面的导入的 数据消失,因此我采用了AJAX(AJAX即“Asynchronous JavaScript and XML”(异步JavaScript和XML),AJAX并非缩写词,而是由Jesse James Gaiiett创造的名词,是指一种创建交互式网页应用的网页开发技术。) 的方式来将数据检测和导入,通过js来获取页面的数值,在运用AJAX的方式传入给数据库。这样的话还可以判断前端页面数值的合理性。在页面初次进入的时 候,通过js获取所有数据,以判断是否可以进行操作。但是这样的话也存在不必要的弊端,就是页面刷新的时候会使所有数据均消失,若是用过后台不刷新的方式 导入服务器控件,这样会使页面上的判断消失。所以我正在考虑如何可以走到很好。
下面就是一部分的代码:
protected void LinkButton5_Click(object sender, EventArgs e)
{
string PathName = FileUpload.PostedFile.FileName;//获取上传文件的文件名
if (this.FileUpload.HasFile)//如果获取到了文件
{
string fileName = System.IO.Path.GetExtension(PathName).ToLower();//返回指定路径文件的扩展名
if (fileName == ".xls")//格式设定成功
{
string pathNew = this.Server.MapPath("/");//返回与Web服务器上指定的虚拟路径对应的物理路径 是字符串就行
pathNew += "\\Excel文件";
if (!Directory.Exists(pathNew))//目录文件夹
{
Directory.CreateDirectory(pathNew);
}
pathNew += "\\" + PathName;
this.FileUpload.PostedFile.SaveAs(pathNew);
//将服务器上的保存的Excel文件显示在页面中
// Bind(pathNew);
DataTable dt = ed.GetExcelText(pathNew);
excelnum = dt.Columns[0].ToString();
excelname = dt.Columns[1].ToString();
excelmoney = dt.Columns[2].ToString();
excelinfo = dt.Columns[3].ToString();
ruserinfo.DataSource = dt; //前端Repeater控件,获取datatable的数据
ruserinfo.DataBind();
File.Delete(pathNew);
}
else
{
//改成页面提示信息
Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language=\'javascript\' defer>alert(\'文件名错误!(xls)\');</script>");
}
}
else
{
//改成页面提示信息
Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language=\'javascript\' defer>alert(\'对不起,无选中文件!\');</script>");
}
}
运用这个方法可以使得excel的数据导入到页面中,而js的代码如下图所示
$(document).ready(function() {
var up = $("#sub"); //获取导入id
up.click(function() { //点击处理时间
getuser();
})
function getuser() { //获取table数值
var tableObj = new Array();
tableObj = $(".table tbody tr");
for (var i = 1; i < tableObj.length; i++) {
var rows = $($(tableObj[i]).find("td")[0]); //生成行号
rows.html(i);
var usernum = $.trim($($(tableObj[i]).find("td")[1]).html()); //获取人员编号(从上到下)
var username = $.trim($($(tableObj[i]).find("td")[2]).html()); //获取人员姓名
var useridcard = $.trim($($(tableObj[i]).find("td")[3]).html()); //获取缴费金额
var userpwd = $.trim($($(tableObj[i]).find("td")[4]).html()); //获取用户信息
var userinfo = $.trim($($(tableObj[i]).find("td")[6]).html()); //获取用户信息
var usertyid = $.trim($($(tableObj[i]).find("td")[5]).html()); //获取用户信息
//ajax异步操作(判断姓名和编码是否匹配),这种写法可以消除时间上的差距
$.ajax({
url: "../handle/addper.ashx",
type: "GET",
async: false,
data: ({ num: usernum, name: username, idcard: useridcard, pwd: userpwd, info: userinfo, tyid: usertyid }),
success: function(data, textStatus, jqXHR) {
if (data == "false") {
alert("上传失败");
return;
}
}
});
//检测成功
};
var that = $(".daoruqian")
that.css("display", "none");
// alert("成功");
alert("成功");
//跳转到
// window.location.href = "Order.aspx?proid=" + worknum;
}
})
而这时候AJAX只要调用一个简单的函数即可。
string name = context.Server.UrlDecode(context.Request.QueryString["name"]);
string pwd = context.Server.UrlDecode(context.Request.QueryString["pwd"]);
string idcard = context.Server.UrlDecode(context.Request.QueryString["idcard"]);
string tyid = context.Server.UrlDecode(context.Request.QueryString["tyid"]);
string info = context.Server.UrlDecode(context.Request.QueryString["info"]);
UserMD um = new UserMD(name, idcard, pwd, info, tyid);
bool b = new UserDA().AddUser(um);
if (b)
{
context.Response.Write("true");
}
else
{
context.Response.Write("false");
}
到这里数据就完结了,嘿嘿
废话不说了,这次的项目中,最重要的就是人员数据的导入以及判断,对于数据库本身不存在的人员而言,导入新人员的方法有两种,一种是单人导入,可以按照 ‘姓名’,‘金额’,‘学号’,‘备注’等字段单人添加。而另一方面则是导入EXCEL,这也是我想要记录的语言,我们所用的导入EXCEL是一种将数据 暂时存在与页面中而不是存放在数据库中,在人员的数据还没有完全符合之前,是不会将人员的数据存放于数据库中,一开始我是准备放入一张临时表中,但是这样 的话对临时表的需求就比较多。故最后就放于页面中,而页面的数据在点击一个服务器控件如:botton等,会自动的刷新页面,而这样的话会使页面的导入的 数据消失,因此我采用了AJAX(AJAX即“Asynchronous JavaScript and XML”(异步JavaScript和XML),AJAX并非缩写词,而是由Jesse James Gaiiett创造的名词,是指一种创建交互式网页应用的网页开发技术。) 的方式来将数据检测和导入,通过js来获取页面的数值,在运用AJAX的方式传入给数据库。这样的话还可以判断前端页面数值的合理性。在页面初次进入的时 候,通过js获取所有数据,以判断是否可以进行操作。但是这样的话也存在不必要的弊端,就是页面刷新的时候会使所有数据均消失,若是用过后台不刷新的方式 导入服务器控件,这样会使页面上的判断消失。所以我正在考虑如何可以走到很好。
下面就是一部分的代码:
protected void LinkButton5_Click(object sender, EventArgs e)
{
string PathName = FileUpload.PostedFile.FileName;//获取上传文件的文件名
if (this.FileUpload.HasFile)//如果获取到了文件
{
string fileName = System.IO.Path.GetExtension(PathName).ToLower();//返回指定路径文件的扩展名
if (fileName == ".xls")//格式设定成功
{
string pathNew = this.Server.MapPath("/");//返回与Web服务器上指定的虚拟路径对应的物理路径 是字符串就行
pathNew += "\\Excel文件";
if (!Directory.Exists(pathNew))//目录文件夹
{
Directory.CreateDirectory(pathNew);
}
pathNew += "\\" + PathName;
this.FileUpload.PostedFile.SaveAs(pathNew);
//将服务器上的保存的Excel文件显示在页面中
// Bind(pathNew);
DataTable dt = ed.GetExcelText(pathNew);
excelnum = dt.Columns[0].ToString();
excelname = dt.Columns[1].ToString();
excelmoney = dt.Columns[2].ToString();
excelinfo = dt.Columns[3].ToString();
ruserinfo.DataSource = dt; //前端Repeater控件,获取datatable的数据
ruserinfo.DataBind();
File.Delete(pathNew);
}
else
{
//改成页面提示信息
Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language=\'javascript\' defer>alert(\'文件名错误!(xls)\');</script>");
}
}
else
{
//改成页面提示信息
Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language=\'javascript\' defer>alert(\'对不起,无选中文件!\');</script>");
}
}
运用这个方法可以使得excel的数据导入到页面中,而js的代码如下图所示
$(document).ready(function() {
var up = $("#sub"); //获取导入id
up.click(function() { //点击处理时间
getuser();
})
function getuser() { //获取table数值
var tableObj = new Array();
tableObj = $(".table tbody tr");
for (var i = 1; i < tableObj.length; i++) {
var rows = $($(tableObj[i]).find("td")[0]); //生成行号
rows.html(i);
var usernum = $.trim($($(tableObj[i]).find("td")[1]).html()); //获取人员编号(从上到下)
var username = $.trim($($(tableObj[i]).find("td")[2]).html()); //获取人员姓名
var useridcard = $.trim($($(tableObj[i]).find("td")[3]).html()); //获取缴费金额
var userpwd = $.trim($($(tableObj[i]).find("td")[4]).html()); //获取用户信息
var userinfo = $.trim($($(tableObj[i]).find("td")[6]).html()); //获取用户信息
var usertyid = $.trim($($(tableObj[i]).find("td")[5]).html()); //获取用户信息
//ajax异步操作(判断姓名和编码是否匹配),这种写法可以消除时间上的差距
$.ajax({
url: "../handle/addper.ashx",
type: "GET",
async: false,
data: ({ num: usernum, name: username, idcard: useridcard, pwd: userpwd, info: userinfo, tyid: usertyid }),
success: function(data, textStatus, jqXHR) {
if (data == "false") {
alert("上传失败");
return;
}
}
});
//检测成功
};
var that = $(".daoruqian")
that.css("display", "none");
// alert("成功");
alert("成功");
//跳转到
// window.location.href = "Order.aspx?proid=" + worknum;
}
})
而这时候AJAX只要调用一个简单的函数即可。
string name = context.Server.UrlDecode(context.Request.QueryString["name"]);
string pwd = context.Server.UrlDecode(context.Request.QueryString["pwd"]);
string idcard = context.Server.UrlDecode(context.Request.QueryString["idcard"]);
string tyid = context.Server.UrlDecode(context.Request.QueryString["tyid"]);
string info = context.Server.UrlDecode(context.Request.QueryString["info"]);
UserMD um = new UserMD(name, idcard, pwd, info, tyid);
bool b = new UserDA().AddUser(um);
if (b)
{
context.Response.Write("true");
}
else
{
context.Response.Write("false");
}
到这里数据就完结了,嘿嘿