<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm3.aspx.cs" Inherits="WebApplication1.WebForm3" %>
<!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>
<asp:Repeater runat="server" ID="rpt" onitemcreated="rpt_ItemCreated">
<HeaderTemplate>
<table border="1">
<tr>
<td>Id</td>
<td>Price</td>
<td>Number</td>
<td>Amount</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%#Eval("Id")%></td>
<td><asp:TextBox ID="tbPrice" runat="server" Text='<%#Eval("Price") %>' AutoPostBack="true"></asp:TextBox></td>
<td><asp:TextBox ID="tbNumber" runat="server" Text='<%#Eval("Number")%>' AutoPostBack="true"></asp:TextBox></td>
<td><asp:Label ID="lbAmount" runat="server" Text='<%#Eval("Amount")%>'></asp:Label></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
{
public partial class WebForm3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Bind();
}
}
public void Bind()
{
List<Txts> list = new List<Txts>()
{
new Txts{ Id=1, Price=2m,Number=3.5m,Amount=5.5m}
};
rpt.DataSource = list;
rpt.DataBind();
}
public struct Txts
{
public int Id { get; set; }
public decimal Price { get; set; }
public decimal Number { get; set; }
public decimal Amount { get; set; }
}
protected void rpt_ItemCreated(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType != ListItemType.AlternatingItem) return;
if (e.Item.FindControl("tbPrice") == null || e.Item.FindControl("tbNumber") == null) return;
TextBox tbPrice = e.Item.FindControl("tbPrice") as TextBox;
TextBox tbNumber = e.Item.FindControl("tbNumber") as TextBox;
tbPrice.TextChanged += tbPrice_TextChanged;
tbNumber.TextChanged += tbNumber_TextChanged;
}
public void tbPrice_TextChanged(object sender, EventArgs e)
{
TextBox tbPrice = sender as TextBox;
RepeaterItem rptPrice = (RepeaterItem)tbPrice.Parent;
TextBox tbNumber = rptPrice.FindControl("tbNumber") as TextBox;
Label lbAmount = rptPrice.FindControl("lbAmount") as Label;
lbAmount.Text = (Convert.ToDecimal(tbPrice.Text.Trim()) * Convert.ToDecimal(tbNumber.Text.Trim())).ToString();
}
public void tbNumber_TextChanged(object sender, EventArgs e)
{
TextBox tbNumber = sender as TextBox;
RepeaterItem rptNumber = (RepeaterItem)tbNumber.Parent;
TextBox tbPrice = rptNumber.FindControl("tbPrice") as TextBox;
Label lbAmount = rptNumber.FindControl("lbAmount") as Label;
lbAmount.Text = (Convert.ToDecimal(tbPrice.Text.Trim()) * Convert.ToDecimal(tbNumber.Text.Trim())).ToString();
}
}
}