一个在ASP.NET中利用服务器控件GridView实现数据增删改查的例子

2023-11-13

备注:这是我辅导的一个项目开发组的一个例子,用文章的方式分享出来,给更多的朋友参考。其实我们这几年的项目中,都不怎么使用服务器控件的形式了,而是更多的采用MVC这种开发模式。但是,如果项目的历史背景是用服务器控件的,也不妨继续沿用,以免变动太大,对项目的整体开发不利。

很多企业业务程序的页面,其实本质上都是对数据的操作,诸如增加、删除、修改和查询(简称:增删改查),如果有可能在一个页面中完整地实现(不需要几个页面转来转去),对于用户来说可能体验较好。

ASP.NET在2.0中开始提供多种数据控件,并且采用了模板的机制,使得我们上面的需求变得可能。今天要讲的就是号称ASP.NET中最复杂的控件:GridView的使用。它可以完整实现增删改查。

image    image

image  image

前台代码: 

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplicationSample.Default" %>
 
<!DOCTYPE html>
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
 
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:GridView ID="gvData" runat="server" OnRowDeleting="gvData_RowDeleting" OnRowUpdating="gvData_RowUpdating" OnRowCancelingEdit="gvData_RowCancelingEdit" OnRowEditing="gvData_RowEditing" AutoGenerateColumns="true" AutoGenerateDeleteButton="true" AutoGenerateEditButton="true">
 
               <%--<Columns>
                    <asp:CommandField HeaderText="操作" UpdateText="保存" CancelText="取消" DeleteText="删除" ShowDeleteButton="true" ShowEditButton="true" EditText="编辑" />
                </Columns>--%>
            </asp:GridView>
 
            <asp:Button ID="btAddNew" runat="server" Text="添加新记录" OnClick="btAddNew_Click" />
        </div>
    </form>
 
    
 
    <script>
        //这里为所有删除按钮都处理一个事件,请用户确认
        var links = document.links;//获取所有的链接
        for (var i in links) {//循环他们
            var a = links[i];//取得当前这个链接
            if (a.text == "Delete" || a.text=="删除") {//如果是删除按钮的话
                var o = a.href;//获取这个链接的地址(默认会生成一个执行javascript的地址的)
 
                a.href = "#";//将这个地址删除掉,就是不要让他执行默认的行为
                a.addEventListener("click", function () {//添加一个新的事件注册
                    var result = window.confirm("你是否真的要删除?");//向用户确认是否要删除
                    if (result == true)//如果用户确定
                        eval(o);//执行原先默认的那个方法(去服务器删除数据)
                    return false;
                });
            }
        }
    </script>
</body>
</html>

后台代码:

using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;
 
namespace WebApplicationSample
{
 
 
    /// <summary>
    /// 这个实例主要演示了如何使用GridView进行数据的增、删、改、查。
    /// 更多有关于该控件的知识,可以参考 http://msdn.microsoft.com/zh-cn/library/vstudio/system.web.ui.webcontrols.gridview.aspx (请仔细阅读)
    /// </summary>
    public partial class Default : System.Web.UI.Page
    {
        /// <summary>
        /// 这是我们定义的一个业务实体类,用来保存界面上的列表数据,为了保存,必须支持序列化
        /// </summary>
        [Serializable]
        public class Employee
        {
            public string FirstName { get; set; }
            public string LastName { get; set; }
        }
 
 
        private List<Employee> data = new List<Employee>();//这是用来保存那个列表数据的字段
        /// <summary>
        /// 重写这个方法来保存视图状态。因为每次页面刷新的时候,默认情况下,data都会被清空,如果希望在多次回发的过程中保存数据,则重写该方法
        /// </summary>
        /// <returns></returns>
        protected override object SaveViewState()
        {
            var obj = new object[] { base.SaveViewState(), data };
            return obj;
        }
        /// <summary>
        /// 重写该方法,是与上面这个方法配套,在回发回来之后加载并还原
        /// </summary>
        /// <param name="savedState"></param>
        protected override void LoadViewState(object savedState)
        {
            var obj = savedState as object[];
 
            base.LoadViewState(obj[0]);
            data = obj[1] as List<Employee>;
        }
        /// <summary>
        /// 页面初始化的时候执行该代码
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {//这里只是一个示例,默认给页面添加一个初始的员工,实际在做的时候,可以不加
                data = new List<Employee>(){
                    new Employee(){FirstName ="ares",LastName ="chen"}
                };
 
                gvData.DataSource = data;
                gvData.DataBind();
            }
        }
 
 
        /// <summary>
        /// 添加新的员工时执行该代码
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btAddNew_Click(object sender, EventArgs e)
        {
            data.Add(new Employee());//创建一个空的对象
            gvData.DataSource = data;//设置数据源
            gvData.EditIndex = data.Count - 1;//设置当前这个对象为编辑状态
            gvData.DataBind();//绑定数据
 
        }
 
        /// <summary>
        /// 当用户决定要删除某一行数据时执行该代码
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void gvData_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            //删除某一行
            data.RemoveAt(e.RowIndex);
            gvData.DataSource = data;
            gvData.EditIndex = -1;
            gvData.DataBind();
        }
        /// <summary>
        /// 当用户要保存修改时执行该代码
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void gvData_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            var index = e.RowIndex;//获取当前编辑行当索引号
            var row = gvData.Rows[index];//获取当前用户编辑的这一行
 
            var firstName = (row.Cells[1].Controls[0] as TextBox).Text;//获取用户输入的数据
            var lastName = (row.Cells[2].Controls[0] as TextBox).Text;//获取用户输入的数据
 
 
            var emp = data[index];//找到这个对象
            emp.FirstName = firstName;
            emp.LastName = lastName;
 
            gvData.DataSource = data;
            gvData.EditIndex = -1;//退出编辑状态
            gvData.DataBind();
        }
        /// <summary>
        /// 当用户要取消编辑的时候
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void gvData_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            gvData.DataSource = data;
            gvData.EditIndex = -1;
            gvData.DataBind();
        }
        /// <summary>
        /// 当用户要进行编辑的时候
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void gvData_RowEditing(object sender, GridViewEditEventArgs e)
        {
            gvData.DataSource = data;
            gvData.EditIndex = e.NewEditIndex;
            gvData.DataBind();
        }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一个在ASP.NET中利用服务器控件GridView实现数据增删改查的例子 的相关文章

  • MySQL:用户对数据库的访问被拒绝

    我正在尝试在 Heroku 上的远程 SQL 服务器上创建一个数据库 clearDB 我与此联系 mysql host lt
  • 带参数的 MySQL 脚本

    我想创建一个部署脚本 以某种方式模拟 Oracle 部署脚本 其中使用 param 您可以使用之前声明的参数 我需要为不同数据库上的不同用户自动调用此脚本 例如我的脚本应该是 USE param DROP TABLE IF EXISTS T
  • 如何通过覆盖 MSBuild 目标来防止外语资源生成?

    我正在致力于减少大型 C ASP NET 解决方案的编译时间 我们的解决方案使用通常的 resx 文件方法翻译成大约十几种外语 这些资源文件的解析和编译极大地减慢了我们的编译时间 并且是日常的挫败感 我知道可以创建自定义资源提供程序并摆脱
  • Mysql 连接到服务器:用户 root@localhost 的访问被拒绝

    edit9 是否有可能我只是缺少文件夹的一些权限 我真的非常非常感谢更多的建议 edit3 由于这篇文章没有得到足够的回复 而且这绝对是至关重要的 我尽快完成这件事 我重建了我的帖子以显示我认为到目前为止我已经扣除的内容 注意 通过许多不同
  • 需要用户使用 NTLM 重新进行身份验证

    我是 NTLM web config 中的authenication windows 有一个 asp net mvc 2 0 站点 现在 一旦用户登录 他们就会一次保持登录状态数周 该应用程序的使用正在向共享使用登录服务帐户的计算机的用户开
  • 您认为 ASP.NET MVC 会与 ASP.NET Webforms 竞争吗?

    您认为 ASP NET MVC 会在 Microsoft Web 开发市场中占据重要份额吗 还是会占市场的 10 15 哦是的 它将让 Web 表单脱颖而出 我们已经看到了真正的 MVC 框架在 Java 世界中的价值 在 MS 世界中 这
  • 查询中的存储过程

    有一个程序获取文件列表 顾名思义 返回一个文件列表以及更多选项 那么是否可以在查询选择中使用此过程 像这样的东西 select Field1 from Image where Field2 IN call GetFileList 你应该把它
  • MySQL:更新所有行将字段设置为0,但将一行的字段设置为1

    是否有一种有效的方法将行字段的选择更新为 0 但根据 ID 将其中一行设置为 1 基本上 我在数据库中有多个对象 我想在其中一个 inuse 之间切换 因此查询将其中一行 按 id 设置为 inuse 1 将其他行设置为 inuse 0 谢
  • PHP 中的 SQL 语句与 phpmyadmin 中的 SQL 语句的行为不同

    I have form store sql INSERT INTO myodyssey myaccount id email username password VALUES NULL email unixmiah formtest woo
  • 用于添加和删除客户名称的 Web 表单出现问题

    我正在尝试创建一个 Web 表单 其中列出了所有客户 然后为您提供一个文本字段 旁边有一个按钮 您可以在其中添加客户 然后它应该显示客户列表 旁边有删除按钮 您可以单击该按钮从数据库中删除客户 我正在让它发挥作用 对于初学者来说 它会回显
  • 使用 LIKE 和撇号的 Mysql 查询问题

    所以我有一个有趣的问题 我从未遇到过 并且似乎找不到太多有关纠正该问题的信息 我有一个庞大的数据库 里面有大量的数据 相当于 10 年的数据 并试图对其进行搜索 现在搜索功能运行良好 但最近有人让我注意到一个 错误 如果你愿意的话 我尝试对
  • 使用 Python 开发时保护 MySQL 密码?

    我正在编写一个使用本地托管的 MySQL 数据库的 Python 脚本 该程序将以源代码形式提供 这样 MySQL 密码就肉眼可见 有没有好的办法来保护这个呢 这个想法是为了防止一些顽皮的人查看源代码 直接访问 MySQL 并做一些事情 好
  • 我应该保留远程数据库的本地副本吗?

    我正在开发一个应用程序 基本上允许人们创建 加入和管理其他人的群组 群组内的人也可以互相发送消息 我一直在想哪条路会更好 保留包含所有信息的远程数据库 包括发送给用户和从用户发送的消息 并让应用程序在每次需要信息时查询服务器 甚至是它以前见
  • 如何使用 iTextSharp 插入 HTML 标记以使用 C# 创建 PDF?

    I am new to iTextSharp API to create PDF I want to Create the a PDF similar shown in following image I have added Table
  • asp.net c# 将数据集中的数据转换为电子邮件正文?

    从数据集到电子邮件正文的最佳方式是什么 我有一个 net 控制台应用程序 用于根据存储过程的结果发送电子邮件通知 并且想知道如何最好地从 SQL 数据转到电子邮件正文 带有颜色和字体的 html 正文是最好的 但纯文本也可以 thanks
  • 将 VS2015 中的 ASP.NET Identity 中的 User Id 类型更改为 int

    默认情况下 VS 2015 中的 ASP NET Identity 使用字符串作为 AspNet 表的主键 我想使用 int 类型的 id 来代替 经过一些研究后发现 框架开箱即用地支持不同类型的 ID 在下面的答案中 我将展示要实现这一目
  • 测验程序的 MySql 数据库设计

    我目前正在开发一个项目 主要是创建一个测验应用程序 它将能够进行包含 10 到 20 个问题的多项选择题或简答题的测验 它需要能够根据正确答案检查用户的答案 然后对用户的答案进行评分 稍后 我可能会实现一个后端功能来在线创建测验 但现在我将
  • TCPDF - 来自 mysql 的打印表显示重复的第一行

    我是 TCPDF 的新手 我面临的小问题是所有输出数据都显示同一行 我的意思是第一条记录重复数据库中存在的总数据 行 的次数 这是我的代码 tbl header
  • 更改 Xamarin 中 ListView 所选项目的背景颜色

    我在 Xamarin 中创建了一个主从类型项目 当我从主页中选择一个项目时 背景颜色默认为橙色 我怎样才能将其更改为我选择的颜色 此问题是 Android 特有的 在 Android 项目中将此行添加到 Resources values s
  • 在 ASP.NET 中生成新的 SessionId

    登录时我想生成一个新的 SessionId 我已经发现一种有效的解决方案 https stackoverflow com questions 1368403 generating a new asp net session in the c

随机推荐

  • Python 自动化测试(三): pytest 参数化测试用例构建

    在之前的文章中主要分享了 pytest 的实用特性 接下来讲 Pytest 参数化用例的构建 如果待测试的输入与输出是一组数据 可以把测试数据组织起来用不同的测试数据调用相同的测试方法 参数化顾名思义就是把不同的参数 写到一个集合里 然后程
  • Jetson Nano复制系统和U盘启动【第三部分】

    一 写在前面 第三部分承接第二部分 由于Nano EMMC容量只有16GB大小 安装系统和SDK后 Nano EMMC只剩下1 4GB容量 几乎没有空间安装其它软件 第三部分的主要内容是将Nano EMMC系统完全复制到U盘中 并修改Nan
  • 经验模式分解(EMD)——简介及Matlab工具箱安装

    最近在做脑电信号分析 在导师的建议下学习了一点经验模式分解 下面简称EMD 的皮毛 期间也是遇到了很多问题 在这里整理出来 一是为了自己备忘 二是为了能尽量帮到有需要的朋友 一 EMD简介 经验模态分解 Empirical Mode Dec
  • Oracle数据库 SQL Plus 命令使用指南

    熟悉oracle的朋友都知道 SQL PLUS是一个重要的和ORACLE打交道的工具 SQL PLUS本身有很多命令 可以帮助我们做很多事情 包括产生一些规格化的报表 提供人机交互等等 下面 我就简单地说明一下 供大家参考 一 帮助命令 H
  • Java有哪些基本数据类型?

    在Java中 有8种基本数据类型 它们分为两种类型 值类型 Primitive types byte 字节型 占用1个字节 表示范围为 128 127 short 短整型 占用2个字节 表示范围为 32768 32767 int 整型 占用
  • Spring Boot 框架总结

    Spring Boot 框架总结 1 springboot的引言 Spring Boot是由Pivotal团队提供的全新框架 其设计目的是用来简化Spring应用的 初始搭建以及开发过程 该框架使用了特定的方式来进行配置 从而使开发人员不
  • SAP S4 FI后台详细配置教程- PART5 (应收帐目和应付帐目配置篇)

    SAP S4 FI后台详细配置教程 PART5 应收帐目和应付帐目配置篇 1 客户 1 1 定义客户科目组 概念功能说明 客户是按照账户组来管理的 可以通过定义客户科目组来进行区 如一般客户 集团内客户 一 次性客户等 客户主数据信息分三个
  • hive add jar 报java.net.UnknownHostException: user错误

    hive gt add jar hdfs mypath myjar jar java net UnknownHostException user Query returned non zero code 1 cause java net U
  • v3s 荔枝派zero开发板 添加 ov2640 摄像头(一)

    1 准备 储备知识 1 DVP是并口传输 速度较慢 传输的带宽低 使用需要PCLK sensor输出时钟 MCLK XCLK 外部时钟输入 VSYNC 场同步 HSYNC 行同步 D 0 11 并口数据 可以是8 10 12bit数据位数大
  • LA@n维向量@解析几何向量和线性代数向量

    文章目录 概念 n维向量 向量类型 实向量和复向量 行向量和列向量 行列向量的转换 特殊向量 向量运算 矩阵的向量分块 解析几何向量和线性代数向量 向量空间 n n n维向量空间
  • JSONObject详解

    JSONObject只是一种数据结构 可以理解为JSON格式的数据结构 key value 结构 可以使用put方法给json对象添加元素 JSONObject可以很方便的转换成字符串 也可以很方便的把其他对象转换成JSONObject对象
  • 微服务架构的主要优势是什么

    微服务架构提供了几个关键优势 使其成为设计和构建应用程序的流行选择 以下是微服务架构的一些显着优势 可扩展性 微服务架构允许单个服务根据其特定需求独立扩展 这种可扩展性可实现高效的资源利用 并能够通过仅扩展必要的服务来处理高流量负载 它可以
  • Kbuild系统源码分析(五)—模块的编译流程

    版权声明 本文为CSDN博主 ashimida 的原创文章 遵循CC 4 0 BY SA版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net lidan113lidan article details
  • 手机黑屏摄像app_手机黑屏摄像软件下载-手机黑屏摄像持续拍摄app1.3安卓版下载_骑士下载...

    手机黑屏摄像持续拍摄app这是一款支持黑屏状态下拍摄的软件 如果你有这方面的需要 可以来试试的 不会让人发现你在拍摄 软件中有黑屏模式 你打开就可以了 使用起来简单 操作也方便 需要的朋友赶紧下载试试吧 软件介绍 能够根据手机上黑屏状态下还
  • 实践指南-前端性能提升 270%

    一 背景 当我们疲于开发一个接一个的需求时 很容易忘记去关注网站的性能 到了某一个节点 猛地发现 随着越来越多代码的堆积 网站变得越来越慢 本文就是从这样的一个背景出发 着手优化网站的前端性能 并总结出一套开发习惯 让我们在日常开发时 也保
  • 无网环境下安装Mysql8.0

    在redhat7 6操作系统上安装mysql8 0服务 服务器只有内网 没有外网 记录一下安装过程 一 软件准备 1 1 下载mysql安装包 下载地址 https dev mysql com downloads mysql 1 2 准备依
  • Vue3 ERROR Error: Cannot find module ‘vue-loader-v16/package.json‘

    Vue3 ERROR Error Cannot find module vue loader v16 package json Vue3 npm run serve错误 1 主要错误信息 2 Vue3项目 运行环境 3 Vue3项目运行操作
  • 金山办公慢下来了?

    大数据产业创新服务媒体 聚焦数据 改变商业 只有长期主义者 才能成为时间的朋友 在笔者看来 越来越向SaaS模式倾斜的金山办公便是 长期主义 的代表之一 近日 金山办公 股票代码 688111 发布2023年半年度报告 报告显示 2023上
  • 如何用python提取音频

    可以使用 Python 的多种库来提取音频 其中一种方法是使用 ffmpeg 库 首先 需要安装 ffmpeg 库 可以使用以下命令进行安装 pipinstall ffmpeg 然后 可以使用以下代码来提取音频 import ffmpeg
  • 一个在ASP.NET中利用服务器控件GridView实现数据增删改查的例子

    备注 这是我辅导的一个项目开发组的一个例子 用文章的方式分享出来 给更多的朋友参考 其实我们这几年的项目中 都不怎么使用服务器控件的形式了 而是更多的采用MVC这种开发模式 但是 如果项目的历史背景是用服务器控件的 也不妨继续沿用 以免变动