GridView 插入、删除、修改、分页的综合例子

来源:互联网 发布:linux日志文件查看 编辑:程序博客网 时间:2024/06/12 22:44
 

本文提供一个综合实现GridView 插入、删除、修改的例子,本例子不依赖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>

原创粉丝点击