[习题] 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. ios各个型号设备屏幕分辨率总结

    https://blog.csdn.net/amyloverice/article/details/79389357     iPhone: iPhone 1G 320x480 iPhone 3G 3 ...

  2. python-django框架中使用七牛云

    1:注册七牛云账号 https://www.qiniu.com/ js文件 链接:https://pan.baidu.com/s/1BW1svHqEsXrrTNtRobKkpg  提取码:ixta 2 ...

  3. PAT甲级——1100 Mars Numbers (字符串操作、进制转换)

    本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90678474 1100 Mars Numbers (20 分) ...

  4. Sublime编写React必备插件

    我终于看到了我要的攻略,sublime自带的format实在是不能看不能看不能看. 攻略地址:http://www.jianshu.com/p/ecf6c802fdc5?open_source=wei ...

  5. Javascript专题(三)b.各种轮播和细节分析--上下滚动轮播

    这一次,我们用原生JS实现上下滚动方式的轮播.顺带学习一下用JS来创建HTML元素. 上一次写的轮播是淡入淡出效果的,相对来说其实是比较简单的. github源码: 上下轮播源码-github A. ...

  6. sysbench压力测试总结

    sysbench压力测试工具简介sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有MySQL.Orac ...

  7. LeetCode 101 Symmetric Tree 判断一颗二叉树是否是镜像二叉树

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).For ex ...

  8. LeetCode 136 Single Number 数组中除一个数外其他数都出现两次,找出只出现一次的数

    Given an array of integers, every element appears twice except for one. Find that single one. class ...

  9. jsonignore的一个坑

    import org.fasterxml.jackson.annotate.JsonIgnore; 和 import org.codehaus.jackson.annotate.JsonIgnore; ...

  10. aop 切面配置

    <bean id="userServiceImpl" class="com.bj.aop.xml.before.UserServiceImpl">& ...