您的位置:首页 > 编程语言 > ASP

ASP.NET中利用Repeater实现增删改操作

2012-02-21 23:18 519 查看
有这样一个需求,就是页面上一个"添加"按钮,点击后在Repeater内动态生成一行,用户填写后保存并显示在Repeater中。

在Repeater内部的每项都有一个编辑和删除功能,点击“编辑”后,出现“更新”和“取消”按钮。

这其中当然也包括了在Repeater内包含下拉框DropDownList控件,也是方便了解是如何绑定和选中数据库中的默认值。

一切尽在如下代码,里面使用的DM是一个数据库访问类,可以根据自己需要修改,使用SQLHelper等之类都可以的。

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

<!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:Button ID="btnNew" runat="server" Text="新建" OnClick="btnNew_OnClick" />
<asp:Repeater ID="rpCustomerInfo" runat="server" OnItemDataBound="rpCustomerInfo_ItemDataBound" OnItemCommand="rpCustomerInfo_ItemCommand">
<HeaderTemplate>
<table>
<tr>
<th>
ID
</th>
<th>
类型
</th>
<th>
名称
</th>
<th>
编辑
</th>
</tr>
<asp:Panel ID="plNew" runat="server" Visible="false">
<tr>
<td>
<asp:Label ID="Label2" runat="server" Text='<%#Eval("ID") %>'></asp:Label>
</td>
<td>
<asp:DropDownList ID="ddlType2" runat="server">
</asp:DropDownList>
</td>
<td>
<asp:TextBox ID="TextBox2" runat="server" Text='<%#Eval("Name")%>'></asp:TextBox>
</td>
<td>
<asp:LinkButton runat="server" ID="lbtSave" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ID")%>'
CommandName="Save" Text="保存"></asp:LinkButton>   
<asp:LinkButton runat="server" ID="lbtCancel2" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ID")%>'
CommandName="Cancel2" Text="取消"></asp:LinkButton>
</td>
</tr>
</asp:Panel>
</HeaderTemplate>
<ItemTemplate>
<asp:Panel ID="PlItem" runat="server">
<tr>
<td>
<asp:Label ID="Label3" runat="server" Text='<%#Eval("ID") %>'></asp:Label>
</td>
<td>
<asp:Label ID="Label4" runat="server" Text='<%#Eval("Type") %>'></asp:Label>
</td>
<td>
<asp:Label ID="Label5" runat="server" Text='<%#Eval("Name") %>'></asp:Label>
</td>
<td>
<asp:LinkButton runat="server" ID="lbtEdit" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ID")%>'
Text="编辑" CommandName="Edit"></asp:LinkButton>   
<asp:LinkButton runat="server" ID="lbtDelete" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ID")%>'
Text="删除" CommandName="Delete"></asp:LinkButton>
</td>
</tr>
</asp:Panel>
<asp:Panel ID="plEdit" runat="server">
<tr>
<td>
<asp:Label ID="Label1" runat="server" Text='<%#Eval("ID") %>'></asp:Label>
</td>
<td>
<asp:DropDownList ID="ddlType" runat="server">
</asp:DropDownList>
</td>
<td>
<asp:TextBox ID="TextBox1" runat="server" Text='<%#Eval("Name")%>'></asp:TextBox>
</td>
<td>
<asp:LinkButton runat="server" ID="lbtUpdate" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ID")%>'
CommandName="Update" Text="更新"></asp:LinkButton>   
<asp:LinkButton runat="server" ID="lbtCancel" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ID")%>'
CommandName="Cancel" Text="取消"></asp:LinkButton>
</td>
</tr>
</asp:Panel>
</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;
using System.Data;
using USTC;

namespace WebApplication1
{
public partial class DynamicRepeater : System.Web.UI.Page
{
DM dm = new DM();
public int m_iID = 0;

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataBinds();
}
}

public void DataBinds()
{
string strSQL = "select * from SubTable where MainTableID=1";
DataTable dt = dm.getsql(strSQL).Tables[0];
this.rpCustomerInfo.DataSource = dt;
this.rpCustomerInfo.DataBind();
}

protected void btnNew_OnClick(object sender, EventArgs e)
{
((Panel)rpCustomerInfo.Controls[0].FindControl("PlNew")).Visible = true ;
}

protected void rpCustomerInfo_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
try
{
if (e.Item.ItemType == ListItemType.Header)
{
DropDownList ddl2 = e.Item.FindControl("ddlType2") as DropDownList;
string strSQL2 = "select * from DataType";
ddl2.DataSource = dm.getsql(strSQL2);
ddl2.DataTextField = "Name";
ddl2.DataValueField = "ID";
ddl2.DataBind();
ddl2.Items.Insert(0, "--请选择--");
}
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
DropDownList ddl = e.Item.FindControl("ddlType") as DropDownList;
string strSQL = "select * from DataType";
ddl.DataSource = dm.getsql(strSQL);
ddl.DataTextField = "Name";
ddl.DataValueField = "ID";
ddl.DataBind();
//设置选中值
DataRowView drv = (DataRowView)e.Item.DataItem;
ddl.Items.FindByValue(drv["Type"].ToString()).Selected = true;

string userid = drv["ID"].ToString();

if (userid != m_iID.ToString())
{
((Panel)e.Item.FindControl("plItem")).Visible = true;
((Panel)e.Item.FindControl("plEdit")).Visible = false;
}
else
{
((Panel)e.Item.FindControl("plItem")).Visible = false;
((Panel)e.Item.FindControl("plEdit")).Visible = true;
}
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
((Panel)e.Item.FindControl("plEdit")).Visible = false;
}
}

protected void rpCustomerInfo_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "Save")
{
int v1 = int.Parse((e.Item.FindControl("ddlType2") as DropDownList).SelectedItem.Value);
string v2 = (e.Item.FindControl("TextBox2") as TextBox).Text;
//保存
string strSQL = "insert into SubTable values(1,"+v1+",'"+v2+"')";
dm.execsql(strSQL);
}
else if (e.CommandName == "SaveCancel")
{
(e.Item.FindControl("PlNew") as Panel).Visible = false;
}
else if (e.CommandName == "Edit")
{
m_iID = int.Parse(e.CommandArgument.ToString());
}
else if (e.CommandName == "Cancel")
{
m_iID = -1;
}
else if (e.CommandName == "Update")
{
//更新
int type = int.Parse((this.rpCustomerInfo.Items[e.Item.ItemIndex].FindControl("ddlType") as DropDownList).SelectedItem.Value);
string name = (this.rpCustomerInfo.Items[e.Item.ItemIndex].FindControl("TextBox1") as TextBox).Text;
string strSQL = "update SubTable  set Type="+type+",Name='"+name+"' where ID="+int.Parse(e.CommandArgument.ToString());
dm.execsql(strSQL);
this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "key", "alert('更新ID:" + e.CommandArgument + "');", true);
}
else if (e.CommandName == "Delete")
{
//删除
string strSQL = "delete from SubTable where ID=" + int.Parse(e.CommandArgument.ToString());
dm.execsql(strSQL);
this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "key", "alert('删除ID:" + e.CommandArgument + "');", true);
}
DataBinds();

}
}
}


这样一个简单的Repeater内的增删改查就实现了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐