文章参考:文章参考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. ARM学习笔记12——GNU ARM汇编伪操作

    1..section 1.1.语法格式 .section section_name[,"flags"[,%type[,flag_specific_arguments]]] 1.2. ...

  2. Linux系统下如何修改主机名

    vi /etc/sysconfig/network vi /etc/hosts sudo hostname

  3. [SAM4N学习笔记]LED点灯程序

    一.准备工作:      将上一节搭建的工程模板复制一份,命名为"1.blink",这作为我们开发的第一个程序. 二.程序编写:      板子上只有一个可控制的LED,就是LED ...

  4. 1 storm基本概念 + storm编程规范及demo编写

    本博文的主要内容有 .Storm的单机模式安装 .Storm的分布式安装(3节点)   .No space left on device .storm工程的eclipse的java编写 http:// ...

  5. C语言字节对齐 __align(),__attribute((aligned (n))),#pragma pack(n)

    转载地址 : http://blog.csdn.net/21aspnet/article/details/6729724 一.概念    对齐跟数据在内存中的位置有关.如果一个变量的内存地址正好位于它 ...

  6. BOM、DOM学习笔记——JavaScript

    1.BOM的概述    browser object modal :浏览器对象模型.    浏览器对象:window对象.    Window 对象会在 <body> 或 <fram ...

  7. go 初使用

    hello.go package main import "fmt" func main(){ fmt.Println("hello world") 直接运行 ...

  8. O(1)调度器的时间计算公式与CFS调度器

    http://blog.csdn.net/dog250/article/details/48750809 O(1): 优先级计算: 进程优先级公式:prio=MAX_RT_PRIO+nice+20其中 ...

  9. Myapplication的作用与理解

    1.前沿在设置里面,对应于某一个应用,虽然没有启动,但是上面有一个终止按钮,说明这个应用时启动的,只是里面没有Activity,所以说使用android退出把一个应用退出,实际上他所对应的Applic ...

  10. Day04 - Python 迭代器、装饰器、软件开发规范

    1. 列表生成式 实现对列表中每个数值都加一 第一种,使用for循环,取列表中的值,值加一后,添加到一空列表中,并将新列表赋值给原列表 >>> a = [0, 1, 2, 3, 4, ...