如何在Repeater控件中实现像GridView控件一样的编辑、更新、删除功能?
下面给出示例 vs.net2008(C#)下编写
后台.cs代码
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!Page.IsPostBack)
- {
- BindGrid();
- }
- }
- private void BindGrid()
- {
- string strSQL = "SELECT * FROM [User]";
- OleDbConnection objConnection = new OleDbConnection(GetStrConnection());
- objConnection.Open();
- OleDbCommand objCommand = new OleDbCommand(strSQL, objConnection);
- OleDbDataReader reader = objCommand.ExecuteReader(CommandBehavior.CloseConnection);
- rptUser.DataSource = reader;
- rptUser.DataBind();
- }
- protected void rptUser_ItemDataBound(object sender, RepeaterItemEventArgs e)
- {
- if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
- {
- System.Data.Common.DbDataRecord record = (System.Data.Common.DbDataRecord)e.Item.DataItem;
- int userId = int.Parse(record["UserId"].ToString());
- if (userId != id)
- {
- ((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;
- }
- }
- }
- protected void rptUser_ItemCommand(object source, RepeaterCommandEventArgs e)
- {
- if (e.CommandName == "Edit")
- {
- id = int.Parse(e.CommandArgument.ToString());
- }
- else if (e.CommandName == "Cancel")
- {
- id = -1;
- }
- else if (e.CommandName == "Update")
- {
- string name = ((TextBox)this.rptUser.Items[e.Item.ItemIndex].FindControl("txtName")).Text.Trim();
- string email = ((TextBox)this.rptUser.Items[e.Item.ItemIndex].FindControl("txtEmail")).Text.Trim();
- string qq = ((TextBox)this.rptUser.Items[e.Item.ItemIndex].FindControl("txtQQ")).Text.Trim();
- string strSQL = "UPDATE [User] SET Name=@Name,Email=@Email,QQ=@QQ WHERE UserId=@UserId";
- OleDbConnection objConnection = new OleDbConnection(GetStrConnection());
- OleDbCommand objCommand = new OleDbCommand(strSQL, objConnection);
- objCommand.Parameters.Add("@Name", OleDbType.VarWChar);
- objCommand.Parameters["@Name"].Value = name;
- objCommand.Parameters.Add("@Email", OleDbType.VarWChar);
- objCommand.Parameters["@Email"].Value = email;
- objCommand.Parameters.Add("@QQ", OleDbType.VarWChar);
- objCommand.Parameters["@QQ"].Value = qq;
- objCommand.Parameters.Add("@UserId", OleDbType.Integer);
- objCommand.Parameters["@UserId"].Value = int.Parse(e.CommandArgument.ToString());
- objConnection.Open();
- objCommand.ExecuteNonQuery();
- objConnection.Close();
- }
- else if (e.CommandName == "Delete")
- {
- string strSQL = "DELETE * FROM [User] WHERE UserId=@UserId";
- OleDbConnection objConnection = new OleDbConnection(GetStrConnection());
- OleDbCommand objCommand = new OleDbCommand(strSQL, objConnection);
- objCommand.Parameters.Add("@UserId", OleDbType.Integer);
- objCommand.Parameters["@UserId"].Value = int.Parse(e.CommandArgument.ToString());
- objConnection.Open();
- objCommand.ExecuteNonQuery();
- objConnection.Close();
- }
- BindGrid();
- }
- private string GetStrConnection()
- {
- return "Provider=Microsoft.Jet.OleDb.4.0;data source=" + Server.MapPath("~/Database/test.mdb");
- }
- 前台.aspx代码
- <form id="form1" runat="server">
- <asp:Repeater ID="rptUser" runat="server" onitemcommand="rptUser_ItemCommand"
- onitemdatabound="rptUser_ItemDataBound">
- <HeaderTemplate>
- <table width="960" align="center" cellpadding="3" cellspacing="1" style="background-color: #ccc;">
- <thead style="background-color: #eee;">
- <tr>
- <th width="10%">
- 用户ID
- </th>
- <th>
- 用户名
- </th>
- <th width="22%">
- 邮件
- </th>
- <th width="20%">
- </th>
- <th width="15%">
- 注册时间
- </th>
- <th width="12%">
- 操作
- </th>
- </tr>
- </thead>
- <tbody style="background-color: #fff;">
- </HeaderTemplate>
- <ItemTemplate>
- <asp:Panel ID="plItem" runat="server">
- <tr style="text-align: center;">
- <td>
- <%# DataBinder.Eval(Container.DataItem, "UserId")%>
- </td>
- <td>
- <%# DataBinder.Eval(Container.DataItem, "Name")%>
- </td>
- <td>
- <%# DataBinder.Eval(Container.DataItem, "Email")%>
- </td>
- <td>
- <%# DataBinder.Eval(Container.DataItem, "QQ")%>
- </td>
- <td>
- <%# DataBinder.Eval(Container.DataItem, "AddTime","{0:yyyy-MM-dd}")%>
- </td>
- <td> <asp:LinkButton runat="server" ID="lbtEdit" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "UserId")%>'
- CommandName="Edit" Text="编辑"></asp:LinkButton>
- <asp:LinkButton runat="server" ID="lbtDelete" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "UserId")%>'
- CommandName="Delete" Text="删除" OnClientClick="return confirm('确定要删除?')"></asp:LinkButton>
- </td>
- </tr>
- </asp:Panel>
- <asp:Panel ID="plEdit" runat="server">
- <tr style="text-align: center;">
- <td>
- <%# DataBinder.Eval(Container.DataItem, "UserId")%>
- </td>
- <td>
- <asp:TextBox ID="txtName" Text='<%# DataBinder.Eval(Container.DataItem,"Name") %>'
- runat="server"></asp:TextBox>
- </td>
- <td>
- <asp:TextBox ID="txtEmail" Text='<%# DataBinder.Eval(Container.DataItem,"Email") %>'
- runat="server"></asp:TextBox>
- </td>
- <td>
- <asp:TextBox ID="txtQQ" Text='<%# DataBinder.Eval(Container.DataItem,"QQ") %>' runat="server"></asp:TextBox>
- </td>
- <td>
- <%# DataBinder.Eval(Container.DataItem, "AddTime","{0:yyyy-MM-dd}")%>
- </td>
- <td>
- <asp:LinkButton runat="server" ID="lbtUpdate" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "UserId")%>'
- CommandName="Update" Text="更新"></asp:LinkButton>
- <asp:LinkButton runat="server" ID="lbtCancel" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "UserId")%>'
- CommandName="Cancel" Text="取消"></asp:LinkButton>
- </td>
- </tr>
- </asp:Panel>
- </ItemTemplate>
- <FooterTemplate>
- </tbody></table>
- </FooterTemplate>
- </asp:Repeater>
- </form>
下载代码示例:PageDemo.RAR
相关文档: Repeater控件的分页实现 Repeater多行间隔显示分隔符的方法 Repeater中嵌套使用Repeater
新闻热点
疑难解答
图片精选