ASP.net GridView控件(删除/更新功能)

2023-05-16

一.说明

部分代码的运用放在以往的教程中,本部分只讲解删除/更新功能

二.前端

我们在其控件上添加事件:
红色为行删除事件
绿色为行更新事件
双击后,即可在后台自动生成对应的方法体
在这里插入图片描述
其代码显示:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebGv2.aspx.cs" Inherits="WebApplication6.WebGv2" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <%--AllowPaging:True     数据进行分页
                PageSize:3           每页分'3'行
                OnPageIndexChanging: 页码改变事件

                -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
                DataKeyNames:id      主键(数据表的列名,按钮事件需要)
				OnRowCancelingEdit:	取消修改事件
				OnRowEditing:		修改事件

                -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
                本节知识点

                OnRowDeleting:      行删除事件
                OnRowUpdating:      行更新事件

                --%>
            <asp:GridView ID="GridView1" runat="server" AllowPaging="True" OnPageIndexChanging="GridView1_PageIndexChanging" PageSize="3" DataKeyNames="id" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowEditing="GridView1_RowEditing" OnRowDeleting="GridView1_RowDeleting" OnRowUpdating="GridView1_RowUpdating">
                <Columns>
                    <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
                </Columns>
            </asp:GridView>
        </div>
    </form>
</body>
</html>

三.后端代码

我们填充删除与更新的方法体:

/// <summary>
/// 行删除事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e">删除事件</param>
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    //GridView1:当前使用的控件
    //DataKeys:主键[]
    //e.RowIndex 删除行的索引
    string sql = string.Format(@"delete from student where id = '{0}'",GridView1.DataKeys[e.RowIndex].Value.ToString());

    //用行封装方法,将数据删除
    MyDBSql.excuteNonQuery(sql);

    //-1 表示编辑取消,因为我们上面将数据删除了,所以前端显示刷新后,自然显示数据已删除
    GridView1.EditIndex = -1;
    bind();
}
/// <summary>
/// 更新事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    string sql ="update student set name='{0}',sex={1} where id='{2}'";

    //定义变量:
    //GridView1.Rows[e.RowIndex]数据表格的当前编辑行
    //Cells[2] 编辑行的第几列,因为我们的编辑/删除按钮也算一行,id也算一行,所以我们从第2行开始抓取数据
    //Controls 类似表格中的文本框

    //先定位控件的当前编辑行,然后是编辑行的第几列,然后是第几列的文本控件,然后将其转换为TextBox类型
    //然后取得TextBox 的Text ,并取消空格,转换为string类型
    string name = ((TextBox)GridView1.Rows[e.RowIndex].Cells[2].Controls[0]).Text.Trim().ToString();
    int sex = ((CheckBox)GridView1.Rows[e.RowIndex].Cells[3].Controls[0]).Checked ? 1 : 0;

	//获取id和删除获取id的方式一样
    string id = GridView1.DataKeys[e.RowIndex].Value.ToString();

    sql = string.Format(sql,name,sex,id);
    //用行封装方法,将数据修改
    MyDBSql.excuteNonQuery(sql);

    //取消编辑状态,并重新加载数据
    GridView1.EditIndex = -1;
    bind();
}

我们点击更新后,数据库便自动更新,同时页面重新加载,显示已更新的数据
在这里插入图片描述

四.数据库封装方法

这里我们调用简单的修改/删除方法:,不明白其原理的小伙伴可以翻看小白以前的笔记.ASP.net 连接Mysql,封装添加功能,原理也差不多是一样的,都是一些简单的方法,相信大家学习起来并部困难

public static int excuteNonQuery(string sql) {

   conn.Open();
   MySqlCommand cmd = conn.CreateCommand();
   cmd.CommandText = sql;

   int result=-1;
   try {
       result=cmd.ExecuteNonQuery();
   }
   finally
   {
       cmd.Dispose();
       conn.Close();

   }
   

   return result;
}

五.知识点

  • 前端asp:GridView 属性:
AllowPaging:True     数据进行分页
PageSize:3           每页分'3'行
OnPageIndexChanging: 页码改变事件

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
DataKeyNames:id      主键(数据表的列名,按钮事件需要)
OnRowCancelingEdit:	取消修改事件
OnRowEditing:		修改事件

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
本节知识点

OnRowDeleting:      行删除事件
OnRowUpdating:      行更新事件
  • 行删除用到的参数
//GridView1:当前使用的控件
//DataKeys:主键[]
//e.RowIndex 获取删除行的索引
//Value.ToString() 获取值,并转换为string类型
string sql = string.Format(@"delete from student where id = '{0}'",GridView1.DataKeys[e.RowIndex].Value.ToString());
  • 行删除注意事项
//在数据库删除完毕后,取消组件删除状态,并重新加载数据
GridView1.EditIndex = -1;
//此方法是自己写的方法,重新加载数据,不知道的小伙伴可以查看上节笔记的内容
bind();
  • 行修改(更新)事件参数
//定义变量:
//GridView1.Rows[e.RowIndex]数据表格的当前编辑行
//Cells[2] 编辑行的第几列,因为我们的编辑/删除按钮也算一行,id也算一行,所以我们从第2行开始抓取数据
//Controls 类似表格中的文本框

//先定位控件的当前编辑行,然后是编辑行的第几列,然后是第几列的文本控件,然后将其转换为TextBox类型
//然后取得TextBox 的Text ,并取消空格,转换为string类型
string name = ((TextBox)GridView1.Rows[e.RowIndex].Cells[2].Controls[0]).Text.Trim().ToString();

//当然我们也可以按需求,转换不同的控件,和类型
int sex = ((CheckBox)GridView1.Rows[e.RowIndex].Cells[3].Controls[0]).Checked ? 1 : 0;
  • 行更新同样需要取消编辑状态,并重新加数据
//取消编辑状态,并重新加载数据
GridView1.EditIndex = -1;
bind();

六.一些补充

<asp:GridView ID="maintainView" runat="server" AutoGenerateColumns="False" 
EnableModelValidation="True" DataKeyNames="id" OnRowCancelingEdit="GridView1_RowCancelingEdit" 
OnRowUpdating="GridView1_RowUpdating" OnRowDeleting="GridView1_RowDeleting" OnRowEditing="GridView1_RowEditing" 
>
<Columns>
    <asp:BoundField DataField="id" HeaderText="编号" />
    <asp:BoundField DataField="name" HeaderText="命名" />
    <asp:BoundField DataField="capa_group" HeaderText="Capa_Group" />
    <asp:BoundField DataField="wip1" HeaderText="wip1" />
    <asp:BoundField DataField="wip3" HeaderText="wip3" />

    <asp:BoundField DataField="out" HeaderText="out" />
    <asp:BoundField DataField="state" HeaderText="state" />
    <asp:BoundField DataField="qty" HeaderText="qty" />

	<%--将编辑设置为按钮,并且标注名称--%>
    <asp:CommandField ShowDeleteButton="True" ShowEditButton="True"
    CancelText="取消" DeleteText="删除" EditText="编辑" InsertText="插入" NewText="新建" 
    SelectText="选择" UpdateText="更新" ButtonType="Button" />
</Columns>

<HeaderStyle BackColor="Yellow" Font-Bold="true" ForeColor="BurlyWood"  />

<%--编辑行--%>
<EditRowStyle BackColor="YellowGreen" />

<%--页脚--%>
<FooterStyle BackColor="ButtonFace" Font-Bold="true" ForeColor="BurlyWood" />
</asp:GridView>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.net GridView控件(删除/更新功能) 的相关文章

  • 如何在没有 Visual Studio 的情况下将新文件添加到 .csproj 文件

    如何添加新文件到 csproj从命令提示符 我认为没有任何工具可以响应命令行上的 add project 命令来执行此操作 但我认为您可以幸运地创建一个程序 脚本来直接操作 csproj 文件的 XML 内容 csproj 文件的结构如下所
  • 托管 .NET 代码中的“访问冲突写入位置...”

    我收到以下异常 MqSearch exe 中 0x000007FE21AFE593 mscorlib ni dll 处出现未处理的异常 0xC0000005 写入位置 0x00000006609476FD 时出现访问冲突 代码是完全托管的
  • 更换 I 过滤器

    我目前正在使用 IFilters 从各种文件 word excel tiff pdf 等 中提取文本 据我所知 IFilter 已在 Windows 8 中停止使用 是否有人对如何在不安装本机应用程序的情况下提取文本有任何建议 如果有什么用
  • 如何正确转义mysql?

    我刚刚发现如果我写 select from tbl where name like foo 然后添加 foo 作为参数及其值 a 用户数据 它不会正确转义 我勒个去 它想要 a 即使我使用参数 我还是忍不住觉得我对 sql 注入持开放态度
  • CompileAssemblyFromDom 抛出访问被拒绝异常

    代码 using var codeProvider new CSharpCodeProvider var compilerParameter new CompilerParameters assemblies assemblyName fa
  • .NET“默认行终止符”?

    有什么方法可以弄清楚 NET 使用什么作为其 默认行终止符 例如 StringBuilder AppendLine String 的文档表示 附加指定字符串的副本 后跟默认行终止符 NET 中的几个与文本相关的类引用相同的概念 有什么方法可
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 使用.Net/C# 计算集合的频率分布

    是否有一种快速 简单的方法来使用 Linq 或其他方式计算 Net 集合的频率分布 例如 任意长的 List 包含许多重复项 遍历列表并计算 跟踪重复次数的巧妙方法是什么 查找列表中重复项的最简单方法是将其分组 如下所示 var dups
  • VB.NET 中的静态方法实现

    我很困惑Static在 VB NET 中的实现 在 C 中 我们可以创建静态类和静态方法来为我们的应用程序编写实用方法 现在 VB NET 让我们创建Module代替静态类 如果我们在模块中创建一个方法 默认情况下它会变成静态的 但在我的应
  • 引用的程序集自动由 Visual Studio 替换

    我有 2 个项目 一个可移植类库和一个常规单元测试项目 在可移植类库中 我使用 NuGet 来引用 Microsoft BCL 可移植包 它附带 2 个程序集 System Threading Tasks dll and System Ru
  • 自定义 IQueryable

    我正在尝试自定义应用程序的实体 使它们具有引用加载它们的 DataContext 的属性 我认为最好的方法是以某种方式创建一个实现 IQueryable 的类 并在其 GetEnumerator 方法中设置实体 datacontext 属性
  • NuGet:包含 .pdb 文件并排除“Content”文件夹

    我已将以下行合并到 CI 构建中在每个构建上创建一个私有 NuGet 包 nuget pack C Projects Test Test vbproj OutputDirectory nas1 NuGet The 读取AssemblyInf
  • Winforms 中的 WPF ElementHost 最大化时崩溃 (Windows)

    我正在尝试将新的 WPF 控件集成到现有的 WinForms 应用程序中 并使用 ElementHost Dock Fill 来托管以下 XAML UserControl NET 4 当我将 WinForm 设置为最大化时 我的整个操作系统
  • 在 JsonConverter 中递归调用 JsonSerializer

    我正在写一个JsonConverter要执行一些我需要在读 写时完成的转换任务 特别是 我采用现有的序列化行为 并在写入 读取时添加一些附加属性 在 的里面JsonConverter 我想利用通过的JsonSerializer实例来执行大部
  • 以编程方式设置 maxRequestLength

    有一个配置值叫做maxRequestLength 在配置文件中 它看起来像这样
  • 尝试对无法访问的主机进行套接字操作

    一位客户在连接到我们的服务器服务的 WCF 客户端上报告了此错误 消息 尝试对无法访问的主机进行套接字操作 类型 System Net Sockets SocketException 从这个链接http msdn microsoft com
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur

随机推荐

  • 【学习记录】Tpro遥控器_暂时取消Tpro的控制权(简易)

    文章目录 按照如下图示配置1 设置好 96 逻辑开关 96 2 选择执行该 96 逻辑开关指令 96 的 96 通道 96 3 配置成功附 xff1a 继电器与R88的接法 按照如下图示配置 1 设置好逻辑开关 2 选择执行该逻辑开关指令的
  • 【Linux】gcc编译工具,断点的设置,gdb调试

    文章目录 注意1 在gcc编译过程中一定要加入选项 96 g 96 xff1b 2 只有在代码处于 96 运行 96 中在 96 暂停 96 状态时才能查看变量值 xff1b 3 设置断点后 xff0c 程序在指定行之前停止 总结主要内容1
  • 【Linux】信号量操作函数

    文章目录 二 实验原理1 semget 函数函数作用 xff1a 参数意义 xff1a 例子 xff1a 2 semop 函数函数作用 xff1a 参数意义 xff1a struct sembuf 结构体定义如下例子 xff1a 再来个完整
  • 【Linux】# 2022 Linux 笔试主要内容 MJ_University

    2022 Linux 笔试主要内容 看前须知道 带 的都是老师复习课上提到的内容 xff0c 但不代表说一定会考哦 xff01 选择题 xff08 20分 xff09 填空题 xff08 20分 xff09 判断题 xff08 10分 xf
  • Ubuntu18.04安装AX210驱动

    Linux Support for Intel Wireless Adapters 从官网可以看到AX210支持的内核版本是5 10 43 如果要在低于5 10的内核版本上安装AX210的驱动的话 xff0c 需要安装以下方法操作 xff1
  • 【Linux】实验四 进程信号通信

    文章目录 一 实验目的二 实验内容三 实验原理1 信号3 1 1 信号的基本概念3 1 2 信号的发送 2 所涉及的系统函数调用3 2 1 fork 3 2 2 kill This is my question 3 2 3 signal 代
  • 报错.SO文件找不到

    此报错大多数可以通过设置环境变量解决 原因 xff1a 当执行函数动态链接 so时 xff0c 此文件不在缺省目录下 lib and usr lib 里 缺省 61 61 默认 解决方案 xff1a 1 find name so文件名 2
  • 头文件(.h) 和实现文件(.cpp)区别

    简单讲 xff0c 一个Package就是由同名的 h和 cpp文件组成 当然可以少其中任意一个文件 xff1a 只有 h文件的Package可以是接口或模板 template 的定义 xff1b 只有 cpp文件的Package可以是一个
  • 坚持学习100天:STL(头大的英文,一个模板库,非得写得我看不懂)

    前言 Hello 我是修齊 学习C 43 43 的第一百零一十八天 18是个美好的数字 xff0c 18岁刚刚好 xff0c 28岁也要用心学习 在这里记录一些学习的东西和学习的心情 内容主要是一些自己学习整理的小笔记 一 指针与引用 1
  • Ubuntu20.04以及ROS系统的安装(避坑指南)

    一 Ubuntu20 04的安装 暑期在我导那里确认好研究方向后 xff0c 一个人摸爬滚打走来确实走了不少弯路 xff0c 遂决定写下这篇文章来帮助有需要的朋友来避坑 本次安装是通过VMware来创建一台虚拟机进行后续操作 xff0c 之
  • Rplidar A2单线雷达实现Cartographer建图

    首先安装rplidar2 xff0c 在工作空间src目录下git clone xff0c catkin make编译后即可使用了 git clone https github com robopeak rplidar ros git 在使
  • 解决Ubuntu非root用户登录时,无法打开Firefox浏览器

    在使用Ubuntu操作系统时 xff0c 创建了一个普通用户 xff0c 登录该用户后发现无法打开Firefox浏览器 xff0c 进行如下步骤可解决问题 提示 Your Firefox profile cannot be loaded I
  • 【C语言】 链表 超详细解析

    目录 一 xff1a 静态存储和动态存储 二 xff1a 存储类别 三 xff1a malloc函数 四 xff1a free函数 五 xff1a 内存初始化函数memset 六 xff1a calloc函数 七 xff1a realloc
  • 2.stm32freeRTOS---创建一个任务

    文章目录 前言一 创建一个任务需要注意哪些 xff1f 1 任务创建函数xTaskCreate2 代码分析 二 动态 静态分配1 动态分配2 静态分配 xff1a 三 删除任务四 一个函数创建两个任务总结 前言 上一次是初步接触实时系统 x
  • 世界上最详细的Linux C udp实现文件传输

    最重要的是掌握UDP的基本概念和使用 UDP h span class token macro property span class token directive hash span span class token directive
  • LidarPointCloud保存PCD文件的方法

    在牵扯到Lidar点云数据相关的开发时 难免需要将LidarPointCloud数据转为PCD文件 来查看点云效果 本文介绍两种办法 1 写文件的方法 根据PCD文件的协议 本样例中使用的数据类型为ara lidar LidarPointC
  • SSD算法解析

    目标检测算法主要分为两类 xff1a Two stage方法 xff1a 如R CNN系列算法 xff0c 主要思路就是通过Selective Search或者CNN网络产生一系列的稀疏矩阵的候选区域 xff0c 然后对这些候选区域进行分类
  • Oracle获取日期&天数

    一 获取当年所有日期 span class token comment select from span span class token keyword select span trunc span class token punctua
  • Oracle where if

    一 where case when Oracle where不能如其他sql直接添加if逻辑 只能使用case when span class token keyword select span span class token opera
  • ASP.net GridView控件(删除/更新功能)

    一 说明 部分代码的运用放在以往的教程中 本部分只讲解删除 更新功能 二 前端 我们在其控件上添加事件 红色为行删除事件 绿色为行更新事件 双击后 即可在后台自动生成对应的方法体 其代码显示 lt 64 Page Language 61 3