C# ASP 动态添加Html Table行
用JS放法实现以下效果:

前端文件Questionnaire23.aspx:
<%@ Page Title="题目" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Questionnaire23.aspx.cs" Inherits="Questionnaire_Questionnaire23" %> <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<script type="text/javascript">
function addRow(tbodyID) {
var bodyObj = document.getElementById(tbodyID);
if (bodyObj == null) {
alert("Body of Table not Exist!");
return;
}
var rowCount = bodyObj.rows.length;
var cellCount = bodyObj.rows[0].cells.length;
var newRow = bodyObj.insertRow(rowCount++);
for (var i = 0; i < cellCount; i++) {
var cellHTML = bodyObj.rows[0].cells[i].innerHTML;
if (cellHTML.indexOf("none") >= 0) {
cellHTML = cellHTML.replace("none", "");
}
newRow.insertCell(i).innerHTML = cellHTML;
}
}
function removeRow(inputobj) {
if (inputobj == null) return;
var parentTD = inputobj.parentNode;
var parentTR = parentTD.parentNode;
var parentTBODY = parentTR.parentNode;
parentTBODY.removeChild(parentTR);
}
</script>
<div>
23、针对衔接培养开发的特色校本课程(没有空白即可)<br/><br/>
<table border="1" cellspacing="0" cellpadding="0">
<thead>
<tr>
<th style="width:265px;">课程名称</th>
<th style="width:150px;">主编</th>
<th style="width:100px;"> </th>
</tr>
</thead>
<tbody id="tbody1">
<tr>
<td>
<input name="className" style="display:none" mce_style="display:none" type="text" size="40"/>
</td>
<td>
<input name="authorName" style="display:none" mce_style="display:none" type="text" size="20"/>
</td>
<td>
<input id="delete" style="display:none" mce_style="display:none" type="button" value="删除行" onclick="removeRow(this)"/>
</td>
</tr>
</tbody>
<tr>
<td colspan="3">
<input type="button" value="添加新行" onclick="addRow('tbody1')"/>
</td>
</tr>
</table>
</div>
<div>
<asp:LinkButton ID="Previous" runat="server" OnClick="Previous_Click">上一题</asp:LinkButton>
<asp:LinkButton ID="Next" runat="server" OnClick="Next_Click">下一题</asp:LinkButton>
</div>
</asp:Content>
后台文件Questionnaire23.aspx.cs:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5 using System.Web.UI;
6 using System.Web.UI.WebControls;
7
8 public partial class Questionnaire_Questionnaire23 : System.Web.UI.Page
9 {
10 protected void Page_Load(object sender, EventArgs e)
11 {
12 if (!IsPostBack)
13 {
14 Answer answer = (Answer)Session["Answer"];
15 //TODO
16 }
17 }
18
19 protected void Previous_Click(object sender, EventArgs e)
20 {
21 String className = (String)Request.Form.Get("className");
22 String authorName = (String)Request.Form.Get("authorName");
23 saveAnswer(className, authorName);
24
25 Response.Redirect("Questionnaire22.aspx");
26 }
27
28 protected void Next_Click(object sender, EventArgs e)
29 {
30 String className = (String)Request.Form.Get("className");
31 String authorName = (String)Request.Form.Get("authorName");
32 saveAnswer(className, authorName);
33
34 Response.Redirect("Questionnaire24.aspx");
35 }
36
37 private void saveAnswer(String className, String authorName)
38 {
39 Answer answer = (Answer)Session["Answer"];
40 answer.Answer23 = "";
41
42 string[] classes = className.Split(new char[] { ',' });
43 string[] authors = authorName.Split(new char[] { ',' });
44 for (int i = 0; i < classes.Length;i++ )
45 {
46 if (i != 0)
47 {
48 answer.Answer23 = answer.Answer23 + classes[i] + ":" + authors[i] + ";";
49 }
50 else
51 {
52 continue;
53 }
54 }
55 Session["Answer"] = answer;
56 }
57 }
添加的行所接收的值以“,” 分割。所以取值的时候用“,”放到数组里。因为第0行是默认行。所以不取数组i = 0的值。
直接continue就好。也有一种方法是做一个table的demo。每次都复制demo的行,这样就省去了默认行的问题。
如果需要再次打开页面的时候把 动态添加的table行以及内容表示出来,就在table的第一行下插入以下代码:
<% string[] answers = (string[])Session["Answer23"];
if (answers != null)
{
for (int i = 0; i < answers.Length; i++)
{
try
{
string[] answerRow = answers[i].Split(new char[] { ':' });
if (answerRow.Length == 2)
{
Response.Write("<tr>");
Response.Write(" <td>");
Response.Write(" <input name='className' type='text' size='40' value='" + answerRow[0] + "'/>");
Response.Write(" </td>");
Response.Write(" <td>");
Response.Write(" <input name='authorName' type='text' size='20' value='" + answerRow[1] + "'/>");
Response.Write(" </td>");
Response.Write(" <td>");
Response.Write(" <input name='delete' type='button' value='删除行' onclick='removeRow(this)'/>");
Response.Write(" </td>");
Response.Write("</tr>");
}
}
catch (Exception ex)
{
System.Console.Write(ex.Message);
}
}
}
%>
当然后台文件要提供数据:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Answer answer = (Answer)Session["Answer"];
if (!String.IsNullOrEmpty(answer.Answer23))
{
string[] answers = answer.Answer23.Split(new char[] { ';' });
Session["Answer23"] = answers;
}
}
}
如果要实现下拉列表的加载,如下图:

需要这么输出:
Response.Write("<tr>");
Response.Write(" <td>");
Response.Write(" <input name='projectName' type='text' size='40' value='" + answerRow[0] + "'/>");
Response.Write(" </td>");
Response.Write(" <td>");
Response.Write(" <select name='ctl00$MainContent$DropDownList1' id='DropDownList1_" + i + "' style='width'>");
Response.Write(" <option value='0'>--请选择--</option>");
Response.Write(" <option value='1'>北京</option>");
Response.Write(" <option value='2'>上海</option>");
Response.Write(" <option value='3'>广州</option>");
Response.Write(" </td>");
Response.Write(" <td>");
Response.Write(" <select name='ctl00$MainContent$DropDownList2' id='DropDownList2_" + i + "' style='width'>");
Response.Write(" <option value='0'>--请选择--</option>");
Response.Write(" <option value='1'>在建</option>");
Response.Write(" <option value='2'>验收</option>");
Response.Write(" </td>");
Response.Write(" <td>");
Response.Write(" <input name='delete' type='button' value='删除行' onclick='removeRow(this)'/>");
Response.Write(" </td>");
Response.Write("</tr>");
Response.Write("<script type='text/javascript'>");
Response.Write(" var lstSelect = document.getElementById('DropDownList1_" + i + "'); ");
Response.Write(" for(var i=0;i<lstSelect.options.length;i++){ ");
Response.Write(" if(lstSelect.options[i].value=='" + answerRow[1] + "'){ ");
Response.Write(" lstSelect.options[i].selected=true;");
Response.Write(" break;");
Response.Write(" }");
Response.Write(" }");
Response.Write(" var lstSelect2 = document.getElementById('DropDownList2_" + i + "'); ");
Response.Write(" for(var i=0;i<lstSelect2.options.length;i++){ ");
Response.Write(" if(lstSelect2.options[i].value=='" + answerRow[2] + "'){ ");
Response.Write(" lstSelect2.options[i].selected=true;");
Response.Write(" break;");
Response.Write(" }");
Response.Write(" }");
Response.Write("</script>");
当然用jQuery也可以实现。
C# ASP 动态添加Html Table行的更多相关文章
- Js实现动态添加删除Table行示例
<table cellpadding="0" cellspacing="0" border="1" style="margi ...
- layui当点击增加的时候,将form中的值获取的添加到table行中代码
layui.use(['table','layer'],function(){ var $=layui.$, table=layui.table, layer=layui.layer; functio ...
- Wpf DataGrid动态添加列,行数据(二)
这是第二中方法,可直接绑定,我这里只是做出了一种思路,并不是最完美. 这里注意一下,因为我里面引用了MVVMLight,所以可能代码不是复制过去就能用了的. 样式也是,所以复制过去看不是我贴出来的界面 ...
- C# DataGridView 动态添加列和行
https://blog.csdn.net/alisa525/article/details/7350471 dataGridView1.ReadOnly = true ; //禁用编辑功能 ...
- Wpf DataGrid动态添加列,行数据(一)
由于最近有这方面的需求,而且刚接触wpf不久,在网上找了很多方法,都不是使用MVVM模式的,因为DataGrid的列不能绑定 这就难受了,我想了个折中的方法,这个是使用了MVVMLight的消息机制, ...
- MiniUI动态添加table表格
本文将介绍一下,如何用Jquery MiniUi动态添加一行table表格 1.效果展示 ↓ 2.具体代码 <script type="text/javascript"> ...
- jQuery如何动态添加具有删除按钮的行
代码实例如下: <!DOCTYPE html><html><head><meta charset=" utf-8"><meta ...
- table动态添加的tr 其click事件在IE兼容模式中不执行 jquery 1.9 的live事件 和获取 first last
http://www.css88.com/jqapi-1.9/first-of-type/index.html#p=//www.css88.com/jqapi-1.9/last-child-selec ...
- 《项目经验》--后台一般处理程序向前台JS文件传递JSON,JS解析JSON,将数据显示在界面--显示在DropDownList 或 显示在动态创建的table中
http://blog.csdn.net/mazhaojuan/article/details/8599167 先看一下我要实现的功能界面: 这篇文章主要介绍:后台一般处理程序把从数据库查找的数据,转 ...
随机推荐
- bzoj4459[Jsoi2013]丢番图
bzoj4459[Jsoi2013]丢番图 题意: 丢番图方程:1/x+1/y=1/n(x,y,n∈N+) ,给定n,求出关于n的丢番图方程有多少组解.n≤10^14. 题解: 通分得yn+xn=xy ...
- DEX文件解析--5、dex方法原型解析
一.前言 前几篇文章链接: DEX文件解析---1.dex文件头解析 DEX文件解析---2.Dex文件checksum(校验和)解析 DEX文件解析--3.dex文件字 ...
- git分支间切换注意点和bug分支的处理
目录 备注: 知识点 记一次分支合并问题状况 从分支点开始,不同分支修改工作区的内容(不添加到暂存区和提交),切换分支,工作区的内容是一样的. 必须在提交或者暂存当前暂存区的状态后,再切换或合并分支 ...
- PyQt5多线程和定时器
多线程 一般情况单线程就可以很好的完成任务,但是对于GUI程序来说,单线程就不能完全满足需求.如果有耗时流程,在单线程的情况下,界面操作就会卡死,直到耗时操作完成,才会响应界面操作.为了解决这个问题, ...
- java基础知识--入门程序说明
①main方法:称为主方法,写法格式固定,是程序的入口或起始点,无论我们编写多少程序,JVM在运行的时候,都会从main方法这里开始执行. ②注释:对代码的解释说明.单行注释//.多行注释/* */. ...
- 深入探究JVM之内存结构及字符串常量池
前言 Java作为一种平台无关性的语言,其主要依靠于Java虚拟机--JVM,我们写好的代码会被编译成class文件,再由JVM进行加载.解析.执行,而JVM有统一的规范,所以我们不需要像C++那样需 ...
- 组件缓存注意事项 ---keep-alive
- django-rest-framework-源码解析004-三大验证(认证/权限/限流)
三大验证模块概述 在DRF的APIView重写的dispatch方法中, self.initial(request, *args, **kwargs) 这句话就是执行三大验证的逻辑, 点进去可以看到 ...
- log4j日志打印级别动态调整
1,为什么日志打印级别要动态调整? 随着项目越来越大,访问量也越来越高,遇到问题时想要排查,可是日志一打开却刷的太快太快,不好排查问题,有的时候甚至因为短时间打印日志太多,严重影响了性能,这个时候日志 ...
- Java 添加、删除、替换、格式化Word中的文本(基于Spire.Cloud.SDK for Java)
Spire.Cloud.SDK for Java提供了TextRangesApi接口可通过addTextRange()添加文本.deleteTextRange()删除文本.updateTextRang ...