GridView 插入、删除、修改、分页的综合例子
来源:互联网 发布:linux日志文件查看 编辑:程序博客网 时间:2024/06/12 22:44
本文提供一个综合实现GridView 插入、删除、修改的例子,本例子不依赖GridView的内置功能,完全采取自定义的做法,更能符合操作习惯。当然,本例子增加排序、分页的功能也非常简单,因为GridView显示的数据只是当前页的数据,所以,不影响分页。效果如图:
完整的源代码:
aspx页面:
<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="true" %><%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data.OleDb" %><script runat="server"> private int EditId = 0;private String ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\ASPNET20Book.mdb;";/// <summary>/// 显示图片,在图片不存在时显示一个 none.gif/// </summary>/// <param name="pathPhoto"></param>/// <returns></returns>private string GetUserPhoto(object pathPhoto){ if (pathPhoto == DBNull.Value) { return "<img src='Images/none.gif'>"; } else { return "<img src='" + pathPhoto.ToString() + "'>"; }}/// <summary>/// 数据绑定的处理。在需要编辑时,显示出编辑框/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e){ if (e.Row.RowType == DataControlRowType.DataRow) { if (EditId > 0) { //如果绑定数据源是DatarReader,则使用下面的方法: //System.Data.Common.DbDataRecord rowItem = (System.Data.Common.DbDataRecord)e.Row.DataItem; //如果绑定是 DataView,则使用此方法 System.Data.DataRowView rowItem = (System.Data.DataRowView)e.Row.DataItem; if (rowItem["id"].ToString().Equals(EditId.ToString())) { //隐藏显示的文字 PlaceHolder LabelTitle = e.Row.FindControl("LabelTitle") as PlaceHolder; LabelTitle.Visible = false; PlaceHolder LabelBirthday = e.Row.FindControl("LabelBirthday") as PlaceHolder; LabelBirthday.Visible = false; PlaceHolder LabelGender = e.Row.FindControl("LabelGender") as PlaceHolder; LabelGender.Visible = false; PlaceHolder LabelClassName = e.Row.FindControl("LabelClassName") as PlaceHolder; LabelClassName.Visible = false; PlaceHolder LabelPhoto = e.Row.FindControl("LabelPhoto") as PlaceHolder; LabelPhoto.Visible = false; //打开编辑框 TextBox uTitle = e.Row.FindControl("uTitle") as TextBox; uTitle.Visible = true; TextBox uBirthDay = e.Row.FindControl("uBirthDay") as TextBox; uBirthDay.Visible = true; RadioButtonList uGender = e.Row.FindControl("uGender") as RadioButtonList; uGender.Visible = true; DropDownList uClassName = e.Row.FindControl("uClassName") as DropDownList; uClassName.Visible = true; FileUpload uPhoto = e.Row.FindControl("uPhoto") as FileUpload; uPhoto.Visible = true; //赋原来的值 if (rowItem["Gender"] != DBNull.Value) { uGender.SelectedIndex = (Convert.ToBoolean(rowItem["Gender"]) ? 0 : 1); } if (rowItem["ClassName"] != DBNull.Value) { uClassName.Items.FindByText(rowItem["ClassName"].ToString()).Selected = true; } //显示编辑更新按钮 Panel PanelNormal = e.Row.FindControl("PanelNormal") as Panel; PanelNormal.Visible = false; Panel PanelUpdate = e.Row.FindControl("PanelUpdate") as Panel; PanelUpdate.Visible = true; } } }}/// <summary>/// 打开编辑框,将编辑标识传递到 EditId/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void EditClick(object sender, EventArgs e){ Button b = sender as Button; EditId = Convert.ToInt32(b.CommandArgument); GridViewRow dvr = b.NamingContainer as GridViewRow; EditId = (int)GridView1.DataKeys[dvr.DataItemIndex].Value; DataBind(); //Response.Write(GridView1.DataKeys[dvr.DataItemIndex].Value);}/// <summary>/// 将编辑的数据保存/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void UpdateClick(object sender, EventArgs e){ Button b = sender as Button; GridViewRow dvr = b.NamingContainer as GridViewRow; TextBox uTitle = dvr.FindControl("uTitle") as TextBox; string StudentTitle = uTitle.Text; string StudentBirthDay = ((TextBox)dvr.FindControl("uBirthDay")).Text; bool StudentGender = ((RadioButtonList)dvr.FindControl("uGender")).SelectedValue == "男" ? true : false; string StudentClassName = ((DropDownList)dvr.FindControl("uClassName")).SelectedValue; string StudentID = GridView1.DataKeys[dvr.RowIndex].Value.ToString(); string sql = ""; String PhotoPath = ""; bool HasFileUploaded = false; FileUpload oUpload = (FileUpload)dvr.FindControl("uPhoto"); if (oUpload.HasFile) { PhotoPath = Guid.NewGuid().ToString("D") + System.IO.Path.GetExtension(oUpload.FileName); oUpload.SaveAs(Server.MapPath("~") + "\\" + PhotoPath); HasFileUploaded = true; } if (HasFileUploaded) { sql = "Update Student Set Title=@Title,BirthDay = @BirthDay,"; sql += "Gender=@Gender,PhotoPath=@PhotoPath,ClassName=@ClassName Where id=@id"; } else { sql = "Update Student Set Title=@Title,BirthDay = @BirthDay,"; sql += "Gender=@Gender,ClassName=@ClassName Where id=@id"; } OleDbConnection cn = new OleDbConnection(ConnectionString); cn.Open(); OleDbCommand cmd = new OleDbCommand(sql, cn); cmd.Parameters.AddWithValue("@Title", StudentTitle); cmd.Parameters.AddWithValue("@BirthDay", StudentBirthDay); cmd.Parameters.AddWithValue("@Gender", StudentGender); if (HasFileUploaded) { cmd.Parameters.AddWithValue("@PhotoPath", PhotoPath); } cmd.Parameters.AddWithValue("@ClassName", StudentClassName); cmd.Parameters.AddWithValue("@id", StudentID); cmd.ExecuteNonQuery(); cn.Close(); Response.Redirect(Request.Url.ToString());}/// <summary>/// 添加新记录/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void AddClick(object sender, EventArgs e){ InsertNewRecord(sender, e);}/// <summary>/// 取消编辑/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void CancelClick(object sender, EventArgs e){ Response.Redirect(Request.UrlReferrer.ToString());} /// <summary>/// 删除记录/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void DeleteClick(object sender, EventArgs e){ Button b = sender as Button; int id = Convert.ToInt32(b.CommandArgument); OleDbConnection cn = new OleDbConnection(ConnectionString); cn.Open(); OleDbCommand cmd = new OleDbCommand("Delete From [Student] Where [id]=@id", cn); cmd.Parameters.AddWithValue("@id", id); cmd.ExecuteNonQuery(); cn.Close(); Response.Redirect(Request.Url.ToString());}/// <summary>/// 插入新记录的公共函数/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void InsertNewRecord(object sender, EventArgs e){ string StudentTitle = ((TextBox)(sender as Button).NamingContainer.FindControl("NewTitle")).Text; if (StudentTitle.Trim() == "") { ErrorMsg.Text = "请输入姓名"; return; } string StudentBirthDay = ((TextBox)(sender as Button).NamingContainer.FindControl("NewBirthDay")).Text; bool StudentGender = ((RadioButtonList) (sender as Button).NamingContainer.FindControl("NewGender")).SelectedValue == "男" ? true : false; string StudentClassName = ((DropDownList) (sender as Button).NamingContainer.FindControl("NewClassName")).SelectedValue; FileUpload oUpload = (FileUpload)(sender as Button).NamingContainer.FindControl("AddPhoto"); String FileName = ""; FileName = Guid.NewGuid().ToString("D") + System.IO.Path.GetExtension(oUpload.FileName); oUpload.SaveAs(Server.MapPath("~") + "\\" + FileName); string sql = "Insert Into Student (Title,BirthDay,Gender,PhotoPath,ClassName)"; sql += " Values(@Title,@BirthDay,@Gender,@PhotoPath,@ClassName)"; OleDbConnection cn = new OleDbConnection(ConnectionString); cn.Open(); OleDbCommand cmd = new OleDbCommand(sql, cn); cmd.Parameters.AddWithValue("@Title", StudentTitle); cmd.Parameters.AddWithValue("@BirthDay", StudentBirthDay); cmd.Parameters.AddWithValue("@Gender", StudentGender); cmd.Parameters.AddWithValue("@PhotoPath", FileName); cmd.Parameters.AddWithValue("@ClassName", StudentClassName); cmd.ExecuteNonQuery(); cn.Close(); Response.Redirect(Request.FilePath.ToString());}/// <summary>/// 生成 Google 样式的分页/// </summary>/// <param name="TotalCountRecord"></param>/// <param name="CurrentPage"></param>/// <param name="PageItem"></param> //每页显示的记录数private int PageItem = 10;private void BuildPagers(int TotalCountRecord, int CurrentPage){ int Step = 6; int LeftNum = 0; int RightNum = 0; String PageUrl = "?"; int PageCount = (int)Math.Ceiling((double)(TotalCountRecord) / PageItem); if (CurrentPage - Step < 1) { LeftNum = 1; } else { LeftNum = CurrentPage - Step; } if (CurrentPage + Step > PageCount) { RightNum = PageCount; } else { RightNum = CurrentPage + Step; } string OutPut = ""; for (int i = LeftNum; i <= RightNum; i++) { if (i == CurrentPage) { OutPut += "<span style='color:red'>" + i.ToString() + "</span> "; } else { OutPut += "<a href=\"" + PageUrl + "Page=" + i.ToString() + "\">" + i.ToString() + "</a> "; } } if (CurrentPage > 1) { OutPut = "<a href='" + PageUrl + "Page=1'>首页</a> <a href=\"" + PageUrl + "Page=" + (CurrentPage - 1) + "\">上一页</a> " + OutPut; } if (CurrentPage < PageCount) { OutPut += " <a href=\"" + PageUrl + "Page=" + (CurrentPage + 1) + "\">下一页</a> <a href='" + PageUrl + "Page=" + PageCount + "'>末页</a>"; } Pager.InnerHtml = OutPut;}/// <summary>/// 加载页面/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void Page_Load(object sender, EventArgs e){ if (!Page.IsPostBack) { DataBind(); }} /// <summary>/// 绑定 GridView/// </summary>protected void DataBind(){ OleDbCommand cmd; String sql; OleDbConnection cn = new OleDbConnection(ConnectionString); cn.Open(); // 由于是 Access 数据库,我们只进行简单的分页。对于性能要求较高的地方,请自行采取其他方法。 sql = "SELECT COUNT(*) FROM [Student]"; cmd = new OleDbCommand(sql, cn); // 总的记录数 int TotalCount = Convert.ToInt32(cmd.ExecuteScalar()); //当前页的序号 int PageIndex = 1; String page = Request.QueryString["Page"]; if (page == null) page = "1"; Int32.TryParse(page, out PageIndex); if (PageIndex < 1) PageIndex = 1; int PageCount = (int)Math.Ceiling((double)(TotalCount) / PageItem); if (PageIndex > PageCount) PageIndex = PageCount; int startRecord = (PageIndex - 1) * PageItem; sql = "SELECT * FROM [Student] ORDER BY [id] DESC"; OleDbDataAdapter da = new OleDbDataAdapter(sql, cn); DataSet ds = new DataSet(); da.Fill(ds, startRecord, PageItem, "Student"); GridView1.DataSource = ds.Tables[0].DefaultView; GridView1.DataBind(); cn.Close(); BuildPagers(TotalCount, PageIndex);}</script><!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 id="Head1" runat="server"><title>GridView 插入、删除、修改的例子</title></head><body><form id="form1" runat="server"><asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="id" OnRowDataBound="GridView1_RowDataBound" ShowFooter="true"> <HeaderStyle BackColor="#ccff99" Font-Bold="true" /> <Columns> <asp:TemplateField HeaderText="姓名"> <ItemTemplate> <asp:PlaceHolder ID="LabelTitle" runat="server"> <%#Eval("Title") %></asp:PlaceHolder> <asp:TextBox ID="uTitle" runat="server" Text='<%#Eval("Title") %>' Visible="false"></asp:TextBox> </ItemTemplate> <FooterTemplate> <asp:TextBox ID="NewTitle" runat="server"></asp:TextBox> </FooterTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="生日(yyyy-MM-dd格式)"> <ItemTemplate> <asp:PlaceHolder ID="LabelBirthday" runat="server"> <%#Eval("BirthDay", "{0:yyyy-MM-dd}")%></asp:PlaceHolder> <asp:TextBox ID="uBirthDay" runat="server" Text='<%#Eval("BirthDay", "{0:yyyy-MM-dd}")%> ' Visible="false" /> </ItemTemplate> <FooterTemplate> <asp:TextBox ID="NewBirthDay" runat="server"></asp:TextBox> </FooterTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="性别"> <ItemTemplate> <asp:PlaceHolder ID="LabelGender" runat="server"> <%#(Eval("Gender")).ToString() =="True"?"男":"女"%></asp:PlaceHolder> <asp:RadioButtonList ID="uGender" runat="server" RepeatDirection="Horizontal" Visible="false"> <asp:ListItem Text="男"></asp:ListItem> <asp:ListItem Text="女"></asp:ListItem> </asp:RadioButtonList> </ItemTemplate> <FooterTemplate> <asp:RadioButtonList ID="NewGender" runat="server" RepeatDirection="Horizontal"> <asp:ListItem Selected="true" Text="男"></asp:ListItem> <asp:ListItem Text="女"></asp:ListItem> </asp:RadioButtonList> </FooterTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="年级"> <ItemTemplate> <asp:PlaceHolder ID="LabelClassName" runat="server"> <%#Eval("ClassName")%></asp:PlaceHolder> <asp:DropDownList ID="uClassName" runat="server" Visible="false"> <asp:ListItem Text="小学" Value="小学"></asp:ListItem> <asp:ListItem Text="中学" Value="中学"></asp:ListItem> <asp:ListItem Text="高中" Value="高中"></asp:ListItem> <asp:ListItem Text="大学" Value="大学"></asp:ListItem> </asp:DropDownList> </ItemTemplate> <FooterTemplate> <asp:DropDownList ID="NewClassName" runat="server"> <asp:ListItem Text="小学" Value="小学"></asp:ListItem> <asp:ListItem Text="中学" Value="中学"></asp:ListItem> <asp:ListItem Text="高中" Value="高中"></asp:ListItem> <asp:ListItem Text="大学" Value="大学"></asp:ListItem> </asp:DropDownList> </FooterTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="照片"> <ItemTemplate> <asp:PlaceHolder ID="LabelPhoto" runat="server"> <%# GetUserPhoto(Eval("PhotoPath")) %></asp:PlaceHolder> <asp:FileUpload ID="uPhoto" runat="server" Visible="false" /> </ItemTemplate> <FooterTemplate> <asp:FileUpload ID="AddPhoto" runat="server" /> </FooterTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="操作"> <ItemTemplate> <asp:Panel ID="PanelNormal" runat="server"> <asp:Button ID="EditButton" runat="server" Text="修改" OnClick="EditClick" CommandArgument='<%#Eval("id") %>' /> <asp:Button ID="DeleteButton" runat="server" Text="删除" OnClick="DeleteClick" CommandArgument='<%#Eval("id") %>' /> </asp:Panel> <asp:Panel ID="PanelUpdate" runat="server" Visible="false"> <asp:Button ID="UpdateButton" runat="server" Text="更新" OnClick="UpdateClick" CommandArgument='<%#Eval("id") %>' /> <asp:Button ID="CancelButton" runat="server" Text="取消" OnClick="CancelClick" /> </asp:Panel> </ItemTemplate> <FooterTemplate> <asp:Button ID="AddButton" runat="server" Text="添加新纪录" OnClick="AddClick" /> </FooterTemplate> </asp:TemplateField> </Columns> <EmptyDataTemplate> <table cellspacing="0" rules="all" border="1" style="border-collapse: collapse;"> <tr> <th>姓名</th> <th>生日(yyyy-MM-dd格式)</th> <th>性别</th> <th>年级</th> <th>照片</th> <th>操作</th> </tr> <tr> <td> <asp:TextBox ID="NewTitle" runat="server"></asp:TextBox> </td> <td> <asp:TextBox ID="NewBirthDay" runat="server"></asp:TextBox> </td> <td> <asp:RadioButtonList ID="NewGender" runat="server" RepeatDirection="Horizontal"> <asp:ListItem Selected="true" Text="男"></asp:ListItem> <asp:ListItem Text="女"></asp:ListItem> </asp:RadioButtonList> </td> <td> <asp:DropDownList ID="NewClassName" runat="server"> <asp:ListItem Text="小学" Value="小学"></asp:ListItem> <asp:ListItem Text="中学" Value="中学"></asp:ListItem> <asp:ListItem Text="高中" Value="高中"></asp:ListItem> <asp:ListItem Text="大学" Value="大学"></asp:ListItem> </asp:DropDownList> </td> <td> <asp:FileUpload ID="AddPhoto" runat="server" /> </td> <td> <asp:Button ID="b" runat="server" Text="添加学生" OnClick="AddClick" /> </td> </tr> </table> </EmptyDataTemplate></asp:GridView><div id="Pager" runat="server" style="text-align:left;padding:10px 0;"></div><asp:Label ID="ErrorMsg" runat="server" ForeColor="red"></asp:Label></form></body></html>
- GridView 插入、删除、修改、分页的综合例子
- 一个 NHIBERNATE+GRIDVIEW 添加删除修改的例子(单表)
- GridView的删除修改
- GridView 自定义模版自定义修改,删除,分页
- sqlserver 触发器 判断是插入 删除 还是修改 的例子
- GridView控件修改、删除例子,修改时含有DropDownList控件
- GridView的行删除、修改
- GridView动态绑定数据、编辑、修改、删除及分页功能
- 数据的插入,修改,删除
- gridview行删除的简单例子
- 一个GridView编辑删除的例子
- 一个GridView编辑删除的例子
- GridView更新、删除、分页
- mybatis 操作(批量插入,批量修改,批量删除, 分页查询)
- GridView添加、删除、修改的使用方法
- 单链表很全的例子,插入,删除,,查找,排序
- 链表建立输出删除插入的综合实例
- 插入、删除、分页代码
- 安全监管问题仍然是虚拟化的挑战
- AMD二代推土机调整 砍掉PCI-E 3.0
- 在线支付
- SmartClient 介绍
- C#类和接口、虚方法和抽象方法及值类型和引用类型的区别
- GridView 插入、删除、修改、分页的综合例子
- Ice笔记--Ice信号处理机制
- plsql知识梳理-sql优化策略
- 读properties文件和写properties文件
- 一个简单编辑器
- alloc_netdev()与alloc_etherdev()
- android 多线程断点续传下载 一
- GDI+ 简单入门学习
- Linux I2C 驱动阅读的碰到的一些网上没有提到的东西 (现在有了)