[习题] FindControl 简单练习--GridView + CheckBox,点选多列数据(复选删除)#3 List或数组

之前的范例,使用字符串、文字来记录将删除的文章ID

后续会有很多小缺失,而且要防呆也麻烦 (如下面 YouTube影片)

[习题] FindControl 简单练习--GridView + CheckBox,点选多列数据(复选删除)#1 简单版

[习题] FindControl 简单练习--GridView + CheckBox,点选多列数据(复选删除) #2 - 分页&范例下载

原先的范例,在书本上集(ASP.NET专题实务(I) / 松岗出版)第十章就有解说

YouTube影片教学  https://youtu.be/LnYXiyQghKs

改用传统数组写,也有点碍手碍脚。后来改用 List处理。

Q:  在 GridView里面,每一列数据都加上 CheckBox,

     被勾选的那一列,就要删除之。 

======================================================================

首先,我们先把 GridView的某一字段,修改成「样版」。

就可以在里面,手动加入一个 CheckBox控件。

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {   // 第一次执行。
            List<string> myArray = new List<string>();    // 初始化。建立一个新的 List
            Session["myArray"] = myArray;
        }
    }
 
 
    protected void Button1_Click(object sender, EventArgs e)
    {   //== 重复的、大量的程序,就抽离出去,独自成为一个函数、子程序。
        Checkbox_Process();
        // 如果您希望按下 "分页" 就自动记录勾选的那几笔,请把这段程序写在底下的GridView "分页"事件即可。
    }
 
 
    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        //    //GridView1.PageIndex = e.NewPageIndex;
        //    ////== 在此不用作 DataBinding。
        //    ////      因为HTML画面里面, GridView已经有设定 DataSourceID。
        //    ////      这个事件不写也行。因为GridView + SqlDataSource精灵会处理分页。
    }
 
 
    //**** 请看上集,第十一章 *******************************************
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {   
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            CheckBox myCheckbox = (CheckBox)e.Row.FindControl("CheckBox1");
            Label myID = (Label)e.Row.FindControl("Label1");
 
            //*** 方法二 ****************************************************************
            //*** 把字符串(A1,A2,A3.....)转成数组会更好,就可以不用在数字前面加上「A」了!
            //*** http://msdn.microsoft.com/zh-tw/library/b873y76a(v=vs.110).aspx
 
            List<string> myArray = (List<string>)Session["myArray"];
            if (myArray.IndexOf(myID.Text) >= 0)   //-- 已经有资料在内
            {    //-- 检查一下,如果文章编号已经记录在里面了,那么 CheckBox就要被勾选。
                myCheckbox.Checked = true;
            }
            else    {
                myCheckbox.Checked = false;
            }
        }
    }
 
 
    protected void Checkbox_Process()
    {
        List<string> myArray = (List<string>)Session["myArray"];
        for (int i = 0; i < GridView1.Rows.Count; i++)
        {
            CheckBox myCheckbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
            Label myID = (Label)GridView1.Rows[i].FindControl("Label1");
 
            if (myCheckbox.Checked == true)
            {   //====================
                //==  被点选的某一笔资料。 ==
                //====================
 
                //批注:VB语法的 Instr(),在C#里面改为 .IndexOf("字符串", 0)
                //    找不到的话, 会传回「-1」。
                //    找到的话,回传一个Integer数字(从零算起)。表示在字符串里面第几个字,符合条件。
                //  请看 http://www.dotblogs.com.tw/mis2000lab/archive/2009/01/14/instr_function_090114.aspx
                
                if (myArray.IndexOf(myID.Text) == -1)
                {   //-- 检查一下,如果相同的文章编号已经记录在 List了,就不要重复记忆!
                    myArray.Add(myID.Text);
                }
            }
            else
            {   //== 「没有」被点选的某一笔资料。 必须从 List里面删除 ==
                if (myArray.IndexOf(myID.Text) >= 0)  //--已经有资料在内              
                {
                    myArray.Remove(myID.Text);
                }
            }   // if -- End
        }  // for loop -- End
 
 
        if (myArray.Count == 0)  {   // List没有 Length,只能用 Count
            Label2.Text = "您尚未点选任何一笔数据(没有删除任何一笔)";
        }
        else    {
            // Debug用的,把资料列在画面上。
            Label2.Text = "";
            foreach (string str in myArray)     {
                Label2.Text += str + ",";
            }
            //== 您可以使用这些文章的ID来进行SQL指令「删除」的动作 ==
        }
    }

您也可以参阅 topcat在蓝色小铺的解答,位于 13F

http://www.blueshop.com.tw/board/FUM20041006161839LRJ/BRD201510271612260I7.html

[习题] FindControl 简单练习--GridView + CheckBox,点选多列数据(复选删除)#3 List或数组的更多相关文章

  1. Jquery复选框的全选全不选及选择所有复选框实现全选的复选框

    Jquery代码 $(function () { $(":checkbox.parentfunc").click(function () { //如何获取被点击的那个复选框 $(t ...

  2. PyQt(Python+Qt)学习随笔:QTreeWidgetItem项中列的复选状态访问方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 树型部件QTreeWidget中的QTreeWidgetItem项,项中每列数据都可以单独设置复选状 ...

  3. ~Vue实现简单答题功能,主要包含单选框和复选框

    内容 实现简单答题效果 环境 Vue,webpack(自行安装) 实现方式 页面将答题列表传递给调用组件,组件将结果返回给调用页面(其它模式也ok,这只是例子) ------------------- ...

  4. GridControl 选择列、复选框全选(下)

    功能:        删除选中行 前台调用: string str=""; GridDelete(gv, "chk", out str); MessageBox ...

  5. GridControl 选择列、复选框全选(上)

    说明: GirdControl 中添加一列,这一列不是写在数据库中的,而是代码中添加的. 图示: 底层类代码: #region GridControl 全选 /// <summary> / ...

  6. excel添加复选框和去掉复选框

    添加复选框 我测试的excel版本是最新版2016,所有版本都是找开发者工具里面包含很多工具呢,大家可以慢慢测试 excel的右上角 点击文件-->选项-->自定义功能区-->添加开 ...

  7. GridView的 PreRender事件与范例--GridView + CheckBox,点选多列资料(复选删除)

    GridView的 PreRender事件与范例--GridView + CheckBox,点选多列资料(复选删除) 之前有一个范例,相同的结果可以用两种作法来实践 [GridView] 资料系结表达 ...

  8. php 判断复选框checkbox是否被选中

    php 判断复选框checkbox是否被选中   复选框checkbox在php表单提交中经常被使用到,本文章通过实例向大家介绍php如何判断复选框checkbox中的值是否被选中,需要的朋友可以参考 ...

  9. jQuery操作复选框的简单使用

    开发中为了实现一个小功能,就是复选框的相互影响事件,如下图: 就是通过复选框设置权限,权限是分等级的,这是一个web管理系统的应用,一个管理员具有三个权限赋予,权限也是有等级的,其中删除和编辑权限相当 ...

随机推荐

  1. Java中的变量传递机制以及JS中的参数传递机制

    JAVA: 传递基本类型是 就是基本的值传递 不会影响值本身. package com.wuqi.p1; public class ValuePassTest { public static void ...

  2. 浅谈JavaScript -- 正则表达式

    什么是正则表达式? 正则表达式是由一个字符序列形成的搜索模式.可用于文本搜索和文本替换. 语法:/正则表达式主体/修饰符(可选) var patt=new RegExp(pattern,modifie ...

  3. 源代码实现一个binary例子

    一.源代码实现一个binary例子 1.例子描述 (1) 数据描述 输入数据X是二进制的一串序列, 在t时刻,有50%的概率是1,50%的概率是0,比如:X=[1,1,0,0,1,0.....]输出数 ...

  4. Ubuntu14.04升级到Ubuntu16.04

    Ubuntu14.04升级到Ubuntu16.04 1.查看目前版本 lsb_release -a 2.执行更新命令 apt-get update && apt-get dist-up ...

  5. PHPExcel探索之旅---阶段三 绘制图表

    利用PHPExcel插件进行绘制图表 <?php /** * 使用PHPExcel插件在excel文件中利用其中的数据建立折线图 * */ $dir = dirname(__FILE__); r ...

  6. BZOJ 3796 Mushroom追妹纸 哈希+二分(+KMP)

    先把两个串能匹配模式串的位置找出来,然后标记为$1$(标记在开头或末尾都行),然后对标记数组求一个前缀和,这样可以快速查到区间内是否有完整的一个模式串. 然后二分子串(答案)的长度,每次把长度为$md ...

  7. flush logs时做的操作

    flush logs时做的操作:  对于一般查询日志和慢日志,先关闭文件再打开  对于binlog,关闭当前的,开始用下一个新的  用错误日志文件的话,先关闭再打开flush logs可以对一般查询日 ...

  8. 033 Search in Rotated Sorted Array 搜索旋转排序数组

    假设按照升序排序的数组在预先未知的某个关键点上旋转.(即 0 1 2 4 5 6 7 将变成 4 5 6 7 0 1 2).给你一个目标值来搜索,如果数组中存在这个数则返回它的索引,否则返回 -1.你 ...

  9. E. Beautiful Subarrays 字典树

    http://codeforces.com/contest/665/problem/E 给定一个序列,问其中有多少个区间,所有数字异或起来 >= k 看到异或,就应该想到异或的性质,A^B^B ...

  10. 深入学习Hive应用场景及架构原理

    Hive背景介绍 Hive最初是Facebook为了满足对海量社交网络数据的管理和机器学习的需求而产生和发展的.互联网现在进入了大数据时代,大数据是现在互联网的趋势,而hadoop就是大数据时代里的核 ...