用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;">&nbsp;</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行的更多相关文章

  1. Js实现动态添加删除Table行示例

    <table cellpadding="0" cellspacing="0" border="1" style="margi ...

  2. layui当点击增加的时候,将form中的值获取的添加到table行中代码

    layui.use(['table','layer'],function(){ var $=layui.$, table=layui.table, layer=layui.layer; functio ...

  3. Wpf DataGrid动态添加列,行数据(二)

    这是第二中方法,可直接绑定,我这里只是做出了一种思路,并不是最完美. 这里注意一下,因为我里面引用了MVVMLight,所以可能代码不是复制过去就能用了的. 样式也是,所以复制过去看不是我贴出来的界面 ...

  4. C# DataGridView 动态添加列和行

    https://blog.csdn.net/alisa525/article/details/7350471 dataGridView1.ReadOnly = true ;      //禁用编辑功能 ...

  5. Wpf DataGrid动态添加列,行数据(一)

    由于最近有这方面的需求,而且刚接触wpf不久,在网上找了很多方法,都不是使用MVVM模式的,因为DataGrid的列不能绑定 这就难受了,我想了个折中的方法,这个是使用了MVVMLight的消息机制, ...

  6. MiniUI动态添加table表格

    本文将介绍一下,如何用Jquery MiniUi动态添加一行table表格 1.效果展示 ↓ 2.具体代码 <script type="text/javascript"> ...

  7. jQuery如何动态添加具有删除按钮的行

    代码实例如下: <!DOCTYPE html><html><head><meta charset=" utf-8"><meta ...

  8. 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 ...

  9. 《项目经验》--后台一般处理程序向前台JS文件传递JSON,JS解析JSON,将数据显示在界面--显示在DropDownList 或 显示在动态创建的table中

    http://blog.csdn.net/mazhaojuan/article/details/8599167 先看一下我要实现的功能界面: 这篇文章主要介绍:后台一般处理程序把从数据库查找的数据,转 ...

随机推荐

  1. Java设计模式 --- 七大常用设计模式示例归纳

    设计模式分为三种类型,共23种: 创建型模式:单例模式.抽象工厂模式.建造者模式.工厂模式.原型模式 结构型模式:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式 行为型模式:模 ...

  2. PagedList分页,如何添加action参数

    使用PagedList分页,如 @Html.PagedListPager((IPagedList)Model, page => Url.Action("Index", new ...

  3. 集成Facebook SDK之Facebook登录

    前言 这几天应公司需求,需要在项目中接入facebook的登录,现在闲下来后再次巩固一下! 准备工作 保证自己的网络已经翻墙,能够进入Facebook网页 准备一个FB的开发者账号,如果没有可以免费申 ...

  4. 服务质量分析:腾讯会议&腾讯云Elasticsearch玩出了怎样的新操作?

    导语 | 腾讯会议于2019年12月底上线,两个月内日活突破1000万,被广泛应用于疫情防控会议.远程办公.师生远程授课等场景,为疫情期间的复工复产提供了重要的远程沟通工具.上线100天内,腾讯会议快 ...

  5. Web优化躬行记(2)——JavaScript

    一.语言 1)慎用全局变量 当变量暴露在全局作用域中时,由于全局作用域比较复杂,因此查找会比较慢. 并且还有可能污染window对象,覆盖之前所赋的值,发生意想不到的错误. 0 == '' //tru ...

  6. Docker引言,由来,思想

    引言 我本地运行没问题啊? 环境不一致? 哪个哥们又写死循环了?,怎么这么卡? 在多用户操作系统下,会相互影响 淘宝在双11的时候,用户量暴增 运维成果过高的问题 学习一门技术,学习安装成本高 关于安 ...

  7. 容器centos7安装部署ansible

    容器centos7安装部署ansible centos镜像版本及ansible版本 centos:centos7.5.1804 ansible:2.9.11 启动容器并进入容器 docker run ...

  8. feign.FeignException: status 404 reading xxService#xxmethod

    做乐优商城授权中心出错 public interface UserApi { @GetMapping("query") public User queryUser( @Reques ...

  9. git原理及如何选择分支模式

    一.git 原理介绍 1.git的四个工作区域 Git有四个工作区域:工作目录(Working Directory).暂存区(Stage/Index).资源库(Repository或Git Direc ...

  10. Java不会被淘汰的12个原因

    如今,面对曾经在程序员中被各种新技术掩盖直至堙灭的技术值得怀念.犹如COBOL这当年被老程序员们尊为神器的语言如今也基本没有价值.而Java作为现代程序员的中坚力量在这点上或许会成为下一个COBOL. ...