当前位置:Gxlcms > ASP > asp+jsp+JavaScript动态实现添加数据行

asp+jsp+JavaScript动态实现添加数据行

时间:2021-07-01 10:21:17 帮助过:34人阅读

在应用程序的开发中,有些输入信息是动态的,比如我们要注册一个员工的工作经历,比如下图

如果做成死的,只能填写三个,如果是四个呢?或者更多呢,那不是添加不上去了吗,所以这样固然不好,我们可以用动态添加表格行实现,如下图,添加一行,输入一行信息,这样比较灵活

下面我们就来看看如何在asp和asp.net中结合javascript来实现这种效果:
首先,动态添加表格是要在前台实现的,当然后台也可以,不过可能要用到ajax,很麻烦,所以最好采用javascript来实现,下面来介绍动态添加表格行的两种方式:
第一种:源码
Javascript:

  1. <script type="text/javascript">
  2. /**//*This function is use to add one row dynamicly
  3. * tabObj : Target table
  4. * colNum: The number of columns that of a row in table
  5. * sorPos: The source of the new row.
  6. * targPos: The position where the new row will be added.
  7. *
  8. */
  9. function addRow(tabObj,colNum,sorPos,targPos){
  10. var nTR = tabObj.insertRow(tabObj.rows.length-targPos); // Insert a new row into appointed table on the
  11. //appointed position.
  12. var TRs = tabObj.getElementsByTagName('TR'); // Get TRs collection from the appointed table
  13. var sorTR = TRs[sorPos]; // Positioned the sorTR
  14. var TDs = sorTR.getElementsByTagName('TD'); // Get TDs collection from the appointed row
  15. if(colNum==0 || colNum==undefined || colNum==isNaN){
  16. colNum=tabObj.rows[0].cells.length;
  17. }
  18. var ntd = new Array(); // Create a new TDs array
  19. for(var i=0; i< colNum; i++){ // Traverl the TDs in row
  20. ntd[i] = nTR.insertCell(); // Create new cell
  21. ntd[i].id = TDs[0].id; // copy the TD's id to new cell. | Attention! The TDs's
  22. //suffix must be appointed
  23. ntd[i].innerHTML = TDs[i].innerHTML; // copy the value in ntd[i]'s innerHTML from corresponding TDs
  24. }
  25. }
  26. /**//* This function is use to remove appointed row in appointed table
  27. * tabObj: the appointed table
  28. * targPos: target row position
  29. * btnObj: currently clicked delete image button
  30. *
  31. */
  32. function deleteRow(tabObj,targPos,btnObj){ //Remove table row
  33. for(var i =0; i<tabObj.rows.length;i++){
  34. if(tabObj.getElementsByTagName('img')[i]==btnObj){
  35. tabObj.deleteRow(i+targPos);
  36. }
  37. }
  38. }
  39. </script>

Html

  1. <table id=tabUserInfo border=1 width="720">
  2. <tr>
  3. <td>姓名</td>
  4. <td>性别</td>
  5. <td>年龄</td>
  6. <td>爱好</td>
  7. <td>Delete</td>
  8. </tr>
  9. <tr style="display:none" id=trUserInfo>
  10. <td id=tdUserInfo><input id=username name=username ></td>
  11. <td id=tdUserInfo><input id=usersex name=usersex></td>
  12. <td id=tdUserInfo><input id=userage name=userage></td>
  13. <td id=tdUserInfo><input id=userlove name=userlove></td>
  14. <td id=tdUserInfo>
  15. <img alt="Delete" onClick="deleteRow(document.all.tabUserInfo,1,this)">
  16. </td>
  17. </tr>
  18. <tr>
  19. <td>
  20. <input type=button value="Add" onClick="addRow(document.all.tabUserInfo,null,1,1)"></td>
  21. </tr>
  22. </table>

在这里有点要注意:<tr  style="display:none" id=trUserInfo> 主要是为了,添加数据的时候,文本框中的值都是空的,要不然添加的 新行都是有值的,这样很不好,当然了,为了防止读取的是空值,在后面获得数据组的时候,我们从索引1开始获得值,这个在后面会讲到

第二种方式:
JavaScript

  1. <script type="text/javascript">
  2. function addRow()
  3. {
  4. var root = document.getElementById("tbody")
  5. var allRows = root.getElementsByTagName('tr');
  6. var allCells = allRows[0].getElementsByTagName('td');
  7. var newRow = root.insertRow();
  8. var newCell0 = newRow.insertCell();
  9. var newCell1 = newRow.insertCell();
  10. var newCell2 = newRow.insertCell();
  11. var newCell3 = newRow.insertCell();
  12. newCell0.innerHTML = allCells[0].innerHTML;
  13. newCell1.innerHTML = allCells[1].innerHTML;
  14. newCell2.innerHTML = allCells[2].innerHTML;
  15. newCell3.innerHTML = allCells[3].innerHTML;
  16. }
  17. function removeRow(r)
  18. {
  19. var root = r.parentNode;
  20. root.deleteRow(r);
  21. }
  22. </script>

Html

  1. <table border="1">
  2. <tr>
  3. <td>aaaa</td>
  4. <td>bbbb</td>
  5. <td>cccc</td>
  6. <td>操作</td>
  7. </tr>
  8. <tr>
  9. <td><select></select></td>
  10. <td><input id="Text1" type="text" /></td>
  11. <td><input id="Text2" type="text"/></td>
  12. <td></td>
  13. </tr>
  14. <tbody id="tbody">
  15. <tr style="display:none">
  16. <td><select></select></td>
  17. <td><input id="a" type="text" /></td>
  18. <td><input id="b" type="text"/></td>
  19. <td><input type="button" value="remove" onclick="removeRow(this.parentNode.parentNode)"/></td>
  20. </tr>
  21. </tbody>
  22. </table>
  23. <table><tr><td><input type="button" value="add" onclick="addRow()" /></td></tr></table>

注意:和第一个基本类似,如果你希望默认的情况下就有一行,那么可以静态的添加一行

下面,就来看看如何通过后台完成对其操作,比如对新增行的修改,删除,添加等
首先说一下数据库的问题
对于这些需要动态添加的表格行的记录,我们需要重新放到放到一个表里,就是单独做一个表,比如上面说到的工作经历的 问题当然了,员工要有一个员工表,记录姓名,年龄,身份证,学历等信息,对于工作经历这块,就需要单独做一个工作经历表,然后根据外键,建立他们之间的关系,这是数据库方面的设计
下面就来看看如何在asp中实现这些
添加操作:
代码:

  1. <!--#include file="inc/conn.asp" -->
  2. <%
  3. if request("tj")="添 加" then
  4. set rs=server.CreateObject("adodb.RecordSet")
  5. strsql="select * from tb_person"
  6. rs.open strsql,conn,2,3
  7. for i =1 to request("username").count
  8. rs.addnew()
  9. rs("userName")=request("username")(i)
  10. rs("sex")=request("usersex")(i)
  11. rs("age")=request("userage")(i)
  12. rs("aihao")=request("userlove")(i)
  13. rs.update
  14. next
  15. end if
  16. %>
  17. <html>
  18. <head>
  19. <script src="myjs.js"></script>
  20. </head>
  21. <body>
  22. <form name=frmUserInfo action="user_list1.asp" method=post>
  23. <br>
  24. <table id=tabUserInfo border=1 width="720">
  25. <tr>
  26. <td>姓名</td>
  27. <td>性别</td>
  28. <td>年龄</td>
  29. <td>爱好</td>
  30. <td>Delete</td>
  31. </tr>
  32. <tr style="display:none" id=trUserInfo>
  33. <td id=tdUserInfo><input id=username name=username ></td>
  34. <td id=tdUserInfo><input id=usersex name=usersex></td>
  35. <td id=tdUserInfo><input id=userage name=userage></td>
  36. <td id=tdUserInfo><input id=userlove name=userlove></td>
  37. <td id=tdUserInfo>
  38. <img alt="Delete" onClick="deleteRow(document.all.tabUserInfo,1,this)">
  39. </td>
  40. </tr>
  41. <tr>
  42. <td>
  43. <input type=button value="Add" onClick="addRow(document.all.tabUserInfo,null,1,1)"></td>
  44. </tr>
  45. </table>
  46. <table>
  47. <tr><td><input type="submit" value="添 加" name="tj" /></td></tr>
  48. </table>
  49. </form>
  50. </body>

注意:在这里我们可以直接通过request("username")获得username列的数组值,通过调试可以看到,第一个(索引为0)值为",",所以获得值的时候我们要从索引为1开始读取,然后逐一添加操作即可

修改:
首先根据外键循环读取数据到一个表格里,代码:

  1. <form name=frmUserInfo action="user_list1.asp" method=post>
  2. <br>
  3. <table border=1 width="720">
  4. <tr>
  5. <td>姓名</td>
  6. <td>性别</td>
  7. <td>年龄</td>
  8. <td>爱好</td>
  9. <td>Delete</td>
  10. </tr>
  11. <%
  12. set rs=server.CreateObject("adodb.RecordSet")
  13. strsql="select * from tb_person"
  14. rs.open strsql,conn,2,3
  15. do while not rs.eof
  16. %>
  17. <tr id=trUserInfo1>
  18. <td id=tdUserInfo1><input id=username1 name=username1 value="<%=rs("userName")%>" ></td>
  19. <td id=tdUserInfo1><input id=usersex1 name=usersex1 value="<%=rs("age")%>"></td>
  20. <td id=tdUserInfo1><input id=userage1 name=userage value="<%=rs("sex")%>"></td>
  21. <td id=tdUserInfo1><input id=userlove1 name=userlove value="<%=rs("aihao")%>"></td>
  22. <td id=tdUserInfo>
  23. <input type="submit" value="删除" />
  24. <!--<img alt="Delete" onClick="deleteRow(document.all.tabUserInfo,1,this)"> --></td>
  25. </tr>
  26. <%
  27. rs.movenext
  28. loop
  29. %>
  30. <table id=tabUserInfo border=1 width="720">
  31. <tr>
  32. <td></td>
  33. <td></td>
  34. <td></td>
  35. <td></td>
  36. <td></td>
  37. </tr>
  38. <tr style="display:none" id=trUserInfo>
  39. <td id=tdUserInfo><input id=username name=username ></td>
  40. <td id=tdUserInfo><input id=usersex name=usersex></td>
  41. <td id=tdUserInfo><input id=userage name=userage></td>
  42. <td id=tdUserInfo><input id=userlove name=userlove></td>
  43. <td id=tdUserInfo>
  44. <img alt="Delete" onClick="deleteRow(document.all.tabUserInfo,1,this)">
  45. </td>
  46. </tr>
  47. <tr>
  48. <td>
  49. <input type=button value="Add" onClick="addRow(document.all.tabUserInfo,null,1,1)"></td>
  50. </tr>
  51. </table>

我的思路是把以前添加的记录和现在要添加的记录行分开操作,如果我们要删除记录行,或者修改记录行可以这样操作
首先删除所以记录,然后重新添加以前的记录和现在的记录,至于代码和添加的思路是一样的,只不过这里面分两个添加来完成的具体的代码,大家可以自己尝试一下

下面在看看在asp.net中如何实现
如果使用asp.net自带的控件封装模式,很难实现,所以这里我们可以采用上面讲到的asp的思想来完成
js和html都一样,不一样的是后台的代码:
比如说添加吧

  1. protected void Button1_Click(object sender, EventArgs e)
  2. {
  3. string username = Request["username"].ToString();
  4. string[] namelist = username.Split(',');
  5. string[] sexlist = username.Split(',');
  6. string[] agelist = username.Split(',');
  7. string[] lovelist = username.Split(',');
  8. for (int i = 1; i < namelist.Length; i++)
  9. {
  10. //获得传递过来的值,对其操作
  11. string name = namelist[i].ToString();
  12. string usersex = sexlist[i].ToString();
  13. string userage = agelist[i].ToString();
  14. string userlove = agelist[i].ToString();
  15. //对其操作,比如添加修改等
  16. }
  17. }

在这里我们使用Request["username"]来获得值,页面用的是html标签,不是服务器端的控件,不用使用.value或者Text来实现, 这样就可以用asp或者jsp的思想来处理了。
同样,修改和删除的也可以使用asp或者jsp的思想来处理。
或者从提交到处理完全采用jsp和asp的思想,创建一个HttpHandler,把数据都提交到这里面处理,这样也可以,不过第一种方法好些,这样容易获得值并处理,不需要转换什么的。

具体的问题具体对待,比如需要默认就有一行,这个时候就需要在员工表里添加工作记录的字段,这一行的记录都添加到员工表里,然后编辑删除的时候需要先编辑,然后进行两个添加等。
大体实现添加数据行的思路就是这样,有什么问题,希望大家给予指正....

人气教程排行