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 先看一下我要实现的功能界面: 这篇文章主要介绍:后台一般处理程序把从数据库查找的数据,转 ...
随机推荐
- CentOS 无法加载 ntfs文件系统类型解决办法
问题: CentOS无法加载ntfs 文件系统类型的移动硬盘. 解决办法: 1.下载rpmforge,下载对应的版本.(对应的CentOS版本,并区分32位和64位). 例如: wget http:/ ...
- P4017 最大食物链计数 (拓扑排序)
看到拓扑排序感觉非常遥远的复杂,不喜欢图.看了拓扑排序的原理,很像广搜. 以本题样例为例: 了解一下 出度 和 入度 5的出度为3 入度为 0 ,3的出度为2 入度为2…… for循环 找到秃头 5 ...
- Nginx/Httpd反代tomcat配置
在上一篇博客中,我们了解了tomcat的server.xml中各组件的用法和作用:其中对于tomcat连接器来说,它分三类,一类是http连接器,一类是https连接器,一类是ajp连接器:通常tom ...
- 目前解决移动端1px边框最好的方法
在移动端开发时,经常会遇到在视网膜屏幕中元素边框变粗的问题.本文将带你探讨边框变粗问题的产生原因及介绍目前市面上最好的解决方法. 1px 边框问题的由来 苹果 iPhone4 首次提出了 Retina ...
- OFDM通信系统的MATLAB仿真(2)
关于OFDM系统的MATLAB仿真实现的第二篇随笔,在第一篇中,我们讨论的是信号经过AWGN信道的情况,只用添加固定噪声功率的高斯白噪声就好了.但在实际无线信道中,信道干扰常常是加性噪声.多径衰落的结 ...
- 初识Http
HTTP是一个用在计算机世界里的协议,它确立了一种计算机之间交流通信的规范,以及相关的各种控制 和错误处理方式. HTTP专门用来在两点之间传输数据,不能用于广播.寻址或路由. HTTP传输的是文 ...
- parted分区
((parted)mklabel ----创建磁盘标签New disk labeltype? gpt ---输入磁盘表情名(parted) p ----再次列出磁盘分区 (parted) mkpart ...
- 第四章 常用API(下)
4.1.String类 描述:该类代表字符串 构造方法: 方法 描述 public String() 初始化构造一个空白字符串 public String(char[] value) 通过字符数组初始 ...
- Django创建简单数据库
在 创建好的 app 目录下的 models.py 中,编写创建 数据库表的限制条件 class Student(models.Model): s_name = models.CharField(ma ...
- PHP 超级全局变量讲解
PHP 超级全局变量 超级全局变量在PHP 4.1.0之后被启用, 是PHP系统中自带的变量,在一个脚本的全部作用域中都可用. PHP 超级全局变量 PHP中预定义了几个超级全局变量(superglo ...