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

 

本文提供一个综合实现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>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值