文章参考:文章参考http://www.cnblogs.com/dataadapter/archive/2012/06/25/2562885.html

效果:

前台代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="rptTest.Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div class="dataTable" >
<asp:HiddenField ID="hfRptColumns" runat="server" Value="receiver,expense_amount,cut_payment_amount,acutal_amount,bank_no,bank_name" />
<table cellpadding="" cellspacing="" border="" style=" width:800px">
<thead>
<tr>
<th></th>
<th >
序号
</th>
<th>
收款人
</th>
<th>
报销金额
</th>
<th>
扣款金额
</th>
<th>
实付金额
</th>
<th>
银行账号
</th>
<th>
开户行
</th>
</tr>
</thead>
<tbody>
<asp:Repeater ID="rptTest" runat="server">
<ItemTemplate>
<tr>
<td><asp:CheckBox runat="server" ID="ckBox" /></td>
<td><%# Container.ItemIndex+ %></td>
<td><asp:Label ID="lblReceiver" runat="server" Text='<%#Eval("receiver") %>'></asp:Label></td>
<td><asp:TextBox ID="txtExpenseAmount" runat="server" Text='<%#Eval("expense_amount") %>'></asp:TextBox></td>
<td><asp:TextBox ID="txtCutPaymentAmount" runat="server" Text='<%#Eval("cut_payment_amount") %>'></asp:TextBox></td>
<td><asp:Label ID="lblAcutalAmount" runat="server" Text='<%#Eval("acutal_amount") %>'></asp:Label></td>
<td><asp:Label ID="lblBankNo" runat="server" Text='<%#Eval("bank_no") %>'></asp:Label></td>
<td><asp:Label ID="lblBankName" runat="server" Text='<%#Eval("bank_name") %>'></asp:Label></td>
</tr>
</ItemTemplate>
</asp:Repeater>
</tbody>
</table> <div>
<asp:Button ID="btnAddNewRow" runat="server" OnClick="btnAddNewRow_Click" Text="添加一行" />
<asp:Button ID="btnDel" runat="server" Text="删除选中行" onclick="btnDel_Click" />
</div>
</div>
</form>
</body>
</html>

后台代码:

添加一行:

protected void btnAddNewRow_Click(object sender, EventArgs e)
{
//首先,恢复数据源
DataTable dt = DefineDataTableSchema(hfRptColumns.Value);
foreach (RepeaterItem item in rptTest.Items)
{
DataRow newRow = dt.NewRow();
newRow["receiver"] = ((Label)item.FindControl("lblReceiver")).Text;
newRow["expense_amount"] = ((TextBox)item.FindControl("txtExpenseAmount")).Text;
newRow["cut_payment_amount"] = ((TextBox)item.FindControl("txtCutPaymentAmount")).Text;
newRow["acutal_amount"] = ((Label)item.FindControl("lblAcutalAmount")).Text;
newRow["bank_no"] = ((Label)item.FindControl("lblBankNo")).Text;
newRow["bank_name"] = ((Label)item.FindControl("lblBankName")).Text;
dt.Rows.Add(newRow);
} //添加一行
DataRow row = dt.NewRow();
dt.Rows.Add(row);
rptTest.DataSource = dt;
rptTest.DataBind();
}

删除一行

protected void btnDel_Click(object sender, EventArgs e)
{
var arr = new System.Collections.ArrayList();
DataTable dt = DefineDataTableSchema(hfRptColumns.Value);
foreach (RepeaterItem item in rptTest.Items)
{
var chk = item.FindControl("ckBox") as CheckBox;
if (chk.Checked) continue; DataRow newRow = dt.NewRow();
newRow["receiver"] = ((Label)item.FindControl("lblReceiver")).Text;
newRow["expense_amount"] = ((TextBox)item.FindControl("txtExpenseAmount")).Text;
newRow["cut_payment_amount"] = ((TextBox)item.FindControl("txtCutPaymentAmount")).Text;
newRow["acutal_amount"] = ((Label)item.FindControl("lblAcutalAmount")).Text;
newRow["bank_no"] = ((Label)item.FindControl("lblBankNo")).Text;
newRow["bank_name"] = ((Label)item.FindControl("lblBankName")).Text;
dt.Rows.Add(newRow);
} rptTest.DataSource = dt;
rptTest.DataBind();
}

因为Repeater是服务端控件,所以用它动态增加或删除一行会刷新页面。用户体验远没有用 knockoutjs 绑定的效果好

附:代码下载

Repeater 动态增加删除一行的更多相关文章

  1. JS动态增加删除UL节点LI

    JS如何动态增加删除UL节点LI及相关内容. <ul id="ul"> <li id=1>11111111111111111<a href=" ...

  2. Hadoop 2.6.3动态增加/删除DataNode节点

    假设集群操作系统均为:CentOS 6.7 x64 Hadoop版本为:2.6.3 一.动态增加DataNode 1.准备新的DataNode节点机器,配置SSH互信,可以直接复制已有DataNode ...

  3. jquery动态加入删除一行数据

    <html> <head> <title>加入.删除一行</title> <meta http-equiv="content-type& ...

  4. wpf动态增加删除控件

    我在xaml中定义了一个名字为morepictureWrapPan为WrapPanel,然后将控件添加在此WrapPanel中.由于要实现控件的删除功能,所以增加的textbox和button的名字都 ...

  5. jquery validate 动态增加删除验证规则(转载)

    页面加载完成初始化form validate $("#user_regForm").validate({ errorPlacement: function(error, eleme ...

  6. jquery validate 动态增加删除验证规则

    增加规则示例: $('.class').rules('add',{ required: true, messages:{ required: '这是必填,请填写', } }); 删除规则示例: $(' ...

  7. table动态增加删除

    基于网上代码修改实现动态添加表数据行 <!DOCTYPE html> <html lang="cn"> <html> <head> ...

  8. JQuery动态增加删除元素

    <form action="" method="post" enctype="multipart/form-data"> < ...

  9. MVC中用jQuery加BootStrap实现动态增加删除文本输入框!

    http://www.freejs.net/article_biaodan_278.html 这是在网上找到方法,我修改了一下实合我的项目,发博只为收藏记录并加深记忆. 修改后效果如下 @model ...

随机推荐

  1. Android项目开发全程(三)-- 项目的前期搭建、网络请求封装是怎样实现的

    在前两篇博文中已经做了铺垫,下面咱们就可以用前面介绍过的内容开始做一个小项目了(项目中会用到Afinal框架,不会用Afinal的童鞋可以先看一下上一篇博文),正所谓麻雀虽小,五脏俱全,这在里我会尽量 ...

  2. [SAM4N学习笔记]按键程序(中断方式)

    一.准备工作:      将上一节搭建的工程复制一份,命名为"6.key interrupt".这一节主要讲如何使用SAM4N的GPIO中断功能,实现按键的中断输入. 二.程序编写 ...

  3. 转载: pyExcelerator(Python操作Excel内库)API 文档

    1.pyExcelerator 主要通过俩个Object操作Excel: Workbook 和Worksheet2.pyExcelerator 读取Excel文件 parase_xls(filenam ...

  4. 缓存算法–LRU

    LRU LRU是Least Recently Used 的缩写,翻译过来就是“最近最少使用”,也就是说,LRU缓存把最近最少使用的数据移除,让给最新读取的数据.而往往最常读取的,也是读取次数最多的,所 ...

  5. 微信小程序正式发布!这是最全的上手指南

    2017 年 1 月 9 日,是一个值得载入互联网史册的日子. 这一天,零点刚过,张小龙和他的团队,在夜色笼罩下,正式发布了微信小程序. 所以,从这一刻开始,只要有开发者登录小程序后台,并在「开发管理 ...

  6. 一步一步学android控件(之二十五)—— SeekBar

    SeekBar扩展自ProgressBar——在ProgressBar的基础上添加了一个用户可以拖拽的thum. SeekBar.OnSeekBarChangeListener是接收SeekBar进度 ...

  7. 安装windows7、windows8.1提示无法创建新的分区

    有时候用原版系统镜像安装windows系统时,会提示“windows无法安装到这个磁盘.选中的磁盘采用GPT分区形式”,导致安装失败,下面就来讲解一下如何解决. 1.在系统提示无法安装的那一步,按住“ ...

  8. boost库在工作(37)网络UDP服务端之七

    前面介绍的都是网络TCP的服务器和客户端,其实还有UDP的服务器和客户端,同时也有同步和异步之分.UDP与TCP最大的区别,就是TCP是基于连接的,而UDP是无连接的.这里所谓的连接是指对方中断服务时 ...

  9. Lucene入门的基本知识(四)

    刚才在写创建索引和搜索类的时候发现非常多类的概念还不是非常清楚,这里我总结了一下. 1 lucene简单介绍  1.1 什么是lucene  Lucene是一个全文搜索框架,而不是应用产品.因此它并不 ...

  10. PHPExcel的读取excel的操作

    首先导入类库: require_once 'PHPExcel.php'; require_once 'PHPExcel\IOFactory.php'; require_once 'PHPExcel\R ...