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 先看一下我要实现的功能界面: 这篇文章主要介绍:后台一般处理程序把从数据库查找的数据,转 ...
随机推荐
- Java匿名对象介绍
Java匿名对象介绍 什么是匿名对象? 顾名思义就是没有变量名的对象,即创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 匿名对象命名格式:以Scanner类举例 new Scann ...
- Python+selenium自动化测试之浏览器基础操作
**前言** 本文主要讲解webdriber框架,Selenium 就像真实用户所做的一样,Selenium 测试可以在 Windows.Linux 和 Macintosh上的 Internet ...
- Python Ethical Hacking - MODIFYING DATA IN HTTP LAYER(3)
Recalculating Content-Length: #!/usr/bin/env python import re from netfilterqueue import NetfilterQu ...
- echarts 实战 : 恼人的间隔问题
使用 echarts 的时候,可能我们需要这个图表的间隔是固定的.比如 3个 4个 5个. (注意计算间隔数量的时候是不算 x轴 本身的.) 这个问题看似简单,其实有点麻烦. yAxis.splitN ...
- unittest学习笔记
File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\remote\errorhandler.py&quo ...
- 看了这篇你就会手写RPC框架了
一.学习本文你能学到什么? RPC的概念及运作流程 RPC协议及RPC框架的概念 Netty的基本使用 Java序列化及反序列化技术 Zookeeper的基本使用(注册中心) 自定义注解实现特殊业务逻 ...
- Python编程入门(第3版)|百度网盘免费下载|零基础入门学习资料
百度网盘免费下载:Python编程入门(第3版) 提取码:rsd7 目录 · · · · · · 第1章 编程简介 11.1 Python语言 21.2 Python适合用于做什么 31.3 程序员 ...
- 两个问题解答、opencv、tensorflow、numpy、matplotlib的基本使用
开始图像处理的海洋 (1)两个问题的详细解答 在开始畅游opencv.tensorflow的海洋之前,我们这里先要解决两个问题. 1.Jupyter notebook 解决了无法自动跳转到浏览器的问题 ...
- Shell分析服务器日志,解锁各种新姿势
1.查看有多少个IP访问: awk '{print $1}' log_file|sort|uniq|wc -l 2.查看某一个页面被访问的次数: grep "/index.php" ...
- date 常用格式化输出
date "+%Y-%m-%d" 2013-02-19 date "+%H:%M:%S" 13:13:59 date "+%Y-%m-%d %H:%M ...