部分代码是参考网上:
前台:<div>
<asp:Button ID="btnAddNewRow" runat="server" OnClick="btnAddNewRow_Click" Text="添 加" />
<asp:Button ID="Button1" runat="server" OnClick="btnPreservation_Click" Text="保 存" />
</div>
<div>
<asp:HiddenField ID="hfRptColumns" runat="server" Value="ID,loginName,loginPwd" />
<table cellpadding="1" cellspacing="0" border="1" style="width: 800px">
<thead>
<tr>
<th>序号
</th>
<th>
用户名
</th>
<th>
密码
</th>
</tr>
</thead>
<tbody>
<asp:Repeater ID="rp" runat="server">
<ItemTemplate>
<tr>
<td>
<asp:Label ID="ItemIndex" runat="server" Text="<%#Container.ItemIndex+1%>"/>
</td>
<td style="display:none;">
<asp:Label runat="server" ID="lb" Text='<%#Eval("ID") %>'>></asp:Label>
</td>
<td>
<asp:TextBox ID="lblReceiver" runat="server" Text='<%#Eval("loginName") %>'></asp:TextBox>
</td>
<td>
<asp:TextBox ID="txtExpenseAmount" runat="server" Text='<%#Eval("loginPwd") %>'></asp:TextBox>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</tbody>
</table>
</div>
后台:
public partial class System_Base_rp : System.Web.UI.Page
{
static DataTable dt = new DataTable();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindData();
}
}
#region 绑定数据源
/// <summary>
/// 绑定repeater的数据源
/// </summary>
private void BindData()
{
string sql = "select * from FWD_Admin";
rp.DataSource = DbHelperSQL.Query(sql).Tables[0];
rp.DataBind();
}
//<summary>
//根据repeater相对应的列名,定义数据源datatable的schema
//</summary>
//<param name="columns">列名</param>
//<returns></returns>
public DataTable DefineDataTableSchema(string columns)
{
dt = new DataTable();
string[] columnsAry = columns.Split(',');
foreach (string str in columnsAry)
{
dt.Columns.Add(str);
}
return dt;
}
#endregion
#region 添加一行
public void btnAddNewRow_Click(object sender, EventArgs e)
{
//首先,恢复数据源
dt = DefineDataTableSchema(hfRptColumns.Value);
foreach (RepeaterItem item in rp.Items)
{
DataRow newRow = dt.NewRow();
newRow["ID"] = ((Label)item.FindControl("lb")).Text;
newRow["loginName"] = ((TextBox)item.FindControl("lblReceiver")).Text;
newRow["loginPwd"] = ((TextBox)item.FindControl("txtExpenseAmount")).Text;
dt.Rows.Add(newRow);
}
//添加一行
DataRow row = dt.NewRow();
dt.Rows.Add(row);
rp.DataSource = dt;
rp.DataBind();
}
#endregion
#region 保存数据
protected void btnPreservation_Click(object sender, EventArgs e)
{
string save;
dt = DefineDataTableSchema(hfRptColumns.Value);
foreach (RepeaterItem item in rp.Items)
{
DataRow newRow = dt.NewRow();
newRow["ID"] = ((Label)item.FindControl("lb")).Text;
newRow["loginName"] = ((TextBox)item.FindControl("lblReceiver")).Text;
newRow["loginPwd"] = ((TextBox)item.FindControl("txtExpenseAmount")).Text;
dt.Rows.Add(newRow);
}
for (int i = 0; i < dt.Rows.Count; i++)
{
if (dt.Rows[i][0].ToString() == "")
{
save = "INSERT INTO FWD_Admin(loginName,loginPwd) VALUES( '" + dt.Rows[i][1].ToString() + "', '" + dt.Rows[i][2].ToString() + "')";
DbHelperSQL.ExecuteSql(save);
}
}
#endregion
}
}
知识点:
1、Container.ItemIndex:添加自增的序号列
2、repeater的结构和机制
3、repeater自动添加行的方法
4、区分datatable新增的数据和数据库原有数据
5、item
注:DbHelperSQL为数据库类