在很多web应用中,我们会遇到很多需要动态插入多行纪录的地方。比如,在人才网站上,我们填写简历的时候,我们要填写我们的项目经验,我们可以根据自己的实际情况动态的添加条数,这种不是以单独页面的形式添加,这种动态添加是在同一个页面下动态添加,最后再一起提交到服务器保存到数据库中。
本文,我将以一个类似的例子来做一个前台用Javascript动态添加数据项,后台保存到数据库的例子。
浏览器:IE.6.0
后台:ASP (VBScript )
前台:HTML + JavaScript
HTML代码:
<script src="myjs.js"></script>
<form name=frmUserInfo action="saveInfo.asp" method=post>
<table>
<tr>
<td>Name:<input id=txtName name=Name></td>
<td>Sex:<input id=txtSex name=Sex></td>
</tr>
</table>
<br>
<table id=tabUserInfo border=1>
<tr>
<td>Project name:</td>
<td>Befre description:</td>
<td>Begin date:</td>
<td>Finished date:</td>
<td>Delete</td>
</tr>
<tr style="display:none" id=trUserInfo>
<td id=tdUserInfo><input id=txtPName name=ProjectName></td>
<td id=tdUserInfo><input id=txtDesc name=Desc></td>
<td id=tdUserInfo><input id=txtBDate name=BDate></td>
<td id=tdUserInfo><input id=txtFDate name=FDate></td>
<td id=tdUserInfo><img alt="Delete" onclick="deleteRow(document.all.tabUserInfo,1,this)"></td>
</tr>
<tr>
<td><input type=button value="Add" onclick="addRow(document.all.tabUserInfo,null,1,1)"></td>
</tr>
</table>
<table>
<tr><td><input type=submit value=Submit><input type=reset></td></tr>
</table>
</form>
JS代码:
/**//*This function is use to add one row dynamicly
* tabObj : Target table
* colNum: The number of columns that of a row in table
* sorPos: The source of the new row.
* targPos: The position where the new row will be added.
*
*/
function addRow(tabObj,colNum,sorPos,targPos)...{
var nTR = tabObj.insertRow(tabObj.rows.length-targPos); // Insert a new row into appointed table on the
//appointed position.
var TRs = tabObj.getElementsByTagName('TR'); // Get TRs collection from the appointed table
var sorTR = TRs[sorPos]; // Positioned the sorTR
var TDs = sorTR.getElementsByTagName('TD'); // Get TDs collection from the appointed row
if(colNum==0 || colNum==undefined || colNum==isNaN)...{
colNum=tabObj.rows[0].cells.length;
}
var ntd = new Array(); // Create a new TDs array
for(var i=0; i< colNum; i++)...{ // Traverl the TDs in row
ntd[i] = nTR.insertCell(); // Create new cell
ntd[i].id = TDs[0].id; // copy the TD's id to new cell. | Attention! The TDs's
//suffix must be appointed
ntd[i].innerHTML = TDs[i].innerHTML; // copy the value in ntd[i]'s innerHTML from corresponding TDs
}
}
/**//* This function is use to remove appointed row in appointed table
* tabObj: the appointed table
* targPos: target row position
* btnObj: currently clicked delete image button
*
*/
function deleteRow(tabObj,targPos,btnObj)...{ //Remove table row
for(var i =0; i<tabObj.rows.length;i++)...{
if(tabObj.getElementsByTagName('img')[i]==btnObj)...{
tabObj.deleteRow(i+targPos);
}
}
}
前台代码总结:
上面的代码有一个要注意的地方,那就是原始行 <tr style="display:none" id=trUserInfo>,我们设置了样式为Display:none,这是因为,下面js中添加行采用的是newTD.innerHTML = sourceTD.innerHTML的方式,即直接把已经存在的列中的内容直接复制到新添加的列的innerHTML属性中,所以隐藏“数据源“列被防止用户删除而出现"Object excepted" 错误。
---------------------------------------------------------------------------
VBScript 代码:
<%
'###### Begin Transcation #####
conn.beginTrans ' Start a transaction
sql = "insert into UserInfo(username,sex) values("
sql=sql&"'"& request("Name") &"',"
sql=sql&"'"& request("Sex") &"')"
Response.Write sql&"<p>"
conn.execute(sql)
if request("ProjectName").count>0 then
dim maxid
maxid = 1
sql = "select max(id) as maxid from UserInfo"
set rs = conn.execute(sql)
maxid = rs("maxid")
rs.close
set rs = nothing
for i =1 to request("ProjectName").count
sql = "insert into ProjectInfo(uid,pname,pdesc,bdate,fdate) values("
sql=sql&""& maxid &","
sql=sql&"'"& request("ProjectName")(i) &"',"
sql=sql&"'"& request("Desc")(i) &"',"
sql=sql&"'"& request("BDate")(i) &"',"
sql=sql&"'"& request("FDate")(i) &"')"
Response.Write " "&sql&"<br>"
conn.execute(sql)
next
end if
if conn.Errors.count > 0 then ' If occus any error in the transaction , roll back transcation
conn.RollBackTrans
else ' If not error, commit the transcation
conn.commitTrans
end if conn.close
set conn = nothing
%> 后台代码总结:
获取多数据的方法是调用request("").count,以count的数目来确定要往主表插入的子表纪录次数。 由于数据操作次数不确定,为了防止在执行数据库操作时发生异常,造成数据不一致。我们采用用事务管理。事务管理具有:原子性,一致性,等特点。可以保证数据安全。我们在数据库操作开始的时候调用conn.beginTrans打开一个事务,在数据操作结束时,用conn.Errors.count来判断在事务期间是否有错误发生,如果发生错误或异常就conn.RollBackTrans回滚。否则提交事务,完成数据库操作。
------------------------------------------------------------------------------------
预览:
图一 :进入填写数据页面,点击Add按钮,添加一行,到图二
图二:再添加一行并且填写数据到图三
图三:在添加了两行数据之后,点击Submit按钮提交数据
图四:提交表单后,数据库将会执行如浏览器打印的几条SQL语句,数据便成功添加到数据库。
总结:
这篇文章讲述了如何用Javascript动态地在前台添加用户输入数据的列,并且后台采用ASP技术将前台添加的数据插入数据库。
希望对学习ASP及Javascript的朋友有所帮助。
如果您有什么疑问,可以联系我。 如果您对本文有何意见,热烈欢迎批评指正!
E-Mail: tangren1206@163.com
QQ:580126
分享到:
相关推荐
尽管具体实现细节没有在给定内容中提及,但可以知道ASP后台将处理表单数据,并与数据库进行交互,比如通过SQL语句实现数据的插入操作。 6. **前端代码实现注意事项**:文档强调,在使用JavaScript复制列内容到新行...
在这个例子中,我们将探讨如何利用JavaScript在HTML表格中实现动态添加行,并将数据提交到服务器进行存储。 首先,我们需要创建一个基本的HTML结构,包括一个表单和一个表格。表格中包含预定义的列,如项目名称、...
在JavaScript中,动态向表格添加数据是一项...总结来说,动态向JavaScript表格添加数据涉及HTML结构、JavaScript DOM操作、事件处理和数据绑定等多个方面。理解并掌握这些知识点对于构建交互式的Web应用程序至关重要。
在JavaScript(JS)中动态生成表格并提交数据到后端是一项常见的前端开发任务,它涉及到DOM操作、事件处理以及与服务器的交互。以下是对这个过程的详细解释: 首先,为了实现动态生成表格,我们需要引入一个...
在本文中,我们将深入探讨如何使用ExtJS框架在前端动态生成表格,并结合后端数据进行展示。ExtJS是一个强大的JavaScript库,专用于构建富客户端Web应用程序,尤其在创建交互式用户界面方面表现突出。动态生成表格是...
- **更新(Update)**: 当用户编辑表格中的数据并保存时,FlexiGrid将更新的数据发送到后台,后台更新数据库记录。 - **删除(Delete)**: 用户选择要删除的行,FlexiGrid发送包含该行ID的请求,后台根据ID删除...
本示例将深入探讨如何利用Ajax和ASP实现网页上的动态数据添加与删除功能,为用户提供无缝的浏览体验。 Ajax的核心在于其异步特性,它允许网页在不刷新整个页面的情况下与服务器进行数据交换。通过JavaScript,我们...
GridView是一种服务器控件,它允许开发者动态地从数据库或其他数据源填充表格。在默认情况下,GridView会显示所有数据行,但在这个例子中,我们将其扩展以支持折叠功能。 实现GridView的折叠功能通常涉及到以下步骤...
在这个"dongtaiwangye.rar_动态网页_网页 数据库"压缩包中,包含的是一个自编写的动态网页项目,它连接了Access后台数据库来实现数据的存储和检索。 动态网页的核心在于其服务器端脚本语言,如PHP、ASP.NET、JSP或...
在这个"JQuery实现的GridView行拖拽例子"中,我们将深入探讨如何利用jQuery来实现GridView控件中行的拖放功能,这是一种增强用户交互性和界面动态性的常见方法。 首先,GridView是ASP.NET中用于显示数据的一种Web...
GridView控件是ASP.NET Web Forms中常用的一种数据呈现控件,它允许开发者以表格的形式展示数据,例如数据库中的记录。在“一个对GridView控件进行展开折叠展示Grid数据源的程序例子”中,我们看到一个利用ajax、...
在IT领域,尤其是在Web开发中,`AJAX`(Asynchronous JavaScript and XML)与`ASP.NET`技术的结合被广泛用于构建动态、交互性强的网页应用。本项目提供了一个轻量级的`grid control`控件源码实例,旨在帮助开发者...
这对于交互性要求高的网页应用尤其重要,例如在这个考核系统中,管理员可能希望实时查看员工的最新数据,或者在后台数据库中更新员工的考核结果。 总的来说,JavaScript在网页开发中扮演了重要角色,它提供了丰富的...
总的来说,"Jsp GridView(代数据库)"是一个结合了JSP、JDBC和数据库的示例,其目标是动态地从数据库获取数据,并以表格的形式在网页上展示。这个过程涉及到了服务器端编程、数据库操作、数据传输以及客户端的页面...
数据绑定可能通过后台C#或VB.NET代码实现,或者使用Ajax技术动态加载。 表格构建完成后,打印功能的实现通常涉及到浏览器的打印API。JavaScript可以调用window.print()函数来启动浏览器的打印对话框。为了优化打印...
5. **后端处理**:在后台的`jQueryPaging.aspx`页面中,我们需要处理AJAX请求,根据传入的参数(Name、PageIndex和PageSize)从数据库中检索数据,进行分页处理,然后将结果以JSON格式返回。这个过程可能涉及到SQL...
总的来说,这个项目涉及了ASP.NET的服务器控件、数据库交互、前端动态效果实现、用户交互设计等多个方面的技术,是Web开发中一个典型的数据展示和用户交互的例子。通过这样的实践,开发者可以提高对前后端协同工作、...
ASP.NET开源项目例子1是一个集合,包含了多个由大型公司贡献的开源项目,旨在为开发者提供参考和学习资源,促进技术的共享与进步。这些项目涵盖了不同的应用领域,如电子商务、内容管理系统、电子书下载、论坛、花卉...
- **asp.net常用的javascript经典例子.doc**:JavaScript是前端脚本语言,与ASP.NET结合使用,可以实现动态交互效果。这份文档可能包含了一些常见的JavaScript函数和用法。 - **小山的TreeView数据绑定方法**:...