惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
J
Java Code Geeks
F
Fortinet All Blogs
Blog — PlanetScale
Blog — PlanetScale
P
Proofpoint News Feed
U
Unit 42
B
Blog
宝玉的分享
宝玉的分享
腾讯CDC
Microsoft Azure Blog
Microsoft Azure Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Last Week in AI
Last Week in AI
博客园 - Franky
博客园 - 三生石上(FineUI控件)
人人都是产品经理
人人都是产品经理
Martin Fowler
Martin Fowler
博客园_首页
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
云风的 BLOG
云风的 BLOG
L
LangChain Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
博客园 - 叶小钗

博客园 - Insus.NET

Vue3实现拖放式上传 拖放式上传 实现MultipartStreamProvider经Web API上传文档或图片 文件上传和表单字段混合提交 在HttpContext.Current返回null时如何操作 angularjs根据类型动态加载组件 angularjs获取数据服务 扫一扫直连WiFi二维码 User Profile Service 服务未能登录 Visual Studio2026创建Vue项目 安装与配置node.js HTTP Error 403.14 - Forbidden VisualStudio2026回滚上一版本 消息认证码(加强) 网站无法使用插值字符串语法 HMAC(Hash-based Message Authentication Code)认证示例 浏览器自动发送域凭据 企业内小网站兼用Windows验证登录 访问用户控件的函数 onblur事件改为监听处理 将警报消息改为吐司消息 内容有无变化OnBlur即时更新引起的问题与解决 混合式提高用户编辑与操作效率 光标离开文框后即刻更新 WebForm实现Web API JavaScript对GridView删除行后并重新给其数据绑定 把CS值传给JS使用 v2 确认信息confirm由C#后端移至javascript前端 无法发布网站Web Site JavaScript判断字符是否为decimal
GridView对行进行全选或单选
Insus.NET · 2026-04-02 · via 博客园 - Insus.NET

现在似乎没有人在web forms(asp.net)开发了吧? 
asp.net + 控件,属正是面向对象开发。

下面例子,算是强化Insus.NET博客中的一个功能,就是对GridView数据件数据行的CheckBox选择。

<asp:TemplateField>
    <HeaderStyle BorderColor="#c0c0c0" BorderWidth="1" Width="10px" />
    <ItemStyle BorderColor="#c0c0c0" BorderWidth="1" Width="10px" />
    <HeaderTemplate>
        <asp:CheckBox ID="CheckBoxSelectedAll" runat="server" CssClass="headerCheckBox" ToolTip="Select All" onclick="checkboxSelectedAll(this);" />
    </HeaderTemplate>
    <ItemTemplate>
        <asp:CheckBox ID="CheckBoxSelectedSingle" runat="server" CssClass="itemCheckBox" ToolTip="Select Single" onclick="checkboxSelectedSingle(this);" />
    </ItemTemplate>
</asp:TemplateField>     

在HeaderTemplate拉了一个CheckBox,全选GridView所有数据行。
而在ItemTemple亦拉了一个CheckBox,此能对当前行进行选中与否。

大概环境,有Masterpage(母版),

ajaxToolkit:ToolkitScriptManager,asp:ScriptManagerProxy,asp:UpdatePanel


javascript程序,首选找到你的GridView控件,

 <script type="text/javascript">
     function getGridView() {
         return document.getElementById('<%=GridView1.ClientID %>');
     }
 </script>

找到GridView控件中<HeaderTemplate>的CheckBox,

 <script type="text/javascript">
function getHeaderCheckBox() {
    var grid = getGridView();
    return grid ? grid.getElementsByTagName("input")[0] : null;
}
 </script>

全选的CheckBox有一个onclick事件onclick="checkboxSelectedAll(this); ,下面代码中
  var inputs = grid.rows[r].cells[1].getElementsByTagName("input");
有个注意点,就是cells[1]。索引为1,因为本例中GridView数据行的单选CheckBox是位于第2例。如果位于第1列,其索引改为0。视你实际情况而定。

 <script type="text/javascript">
     // 全选/全不选
function checkboxSelectedAll(checkbox) {
    var grid = getGridView();
    if (!grid) return;
    var selected = checkbox.checked ? true : false;
    for (var r = 1; r < grid.rows.length; r++) {
        var inputs = grid.rows[r].cells[1].getElementsByTagName("input");
        if (inputs[0].type === "checkbox") {
            inputs[0].checked = selected;
        }
    }
}
 </script>

下面代码,是ItemTemplate中的CheckBox的onclick事件

onclick="checkboxSelectedSingle(this);,可以参考下面javascript。
// 单选
<script type="text/javascript">
function checkboxSelectedSingle(checkbox) {
    var grid = getGridView();
    if (!grid) return;
    var header = getHeaderCheckBox();
    if (!header) return;

    if (checkbox.checked) {
        header.checked = true;
        for (var r = 1; r < grid.rows.length; r++) {
            var inputs = grid.rows[r].cells[1].getElementsByTagName("input");
            if (inputs.length > 0 && inputs[0].type === "checkbox" && inputs[0].checked === false) {
                header.disabled = true;
                break;
            }
            else {
                header.disabled = false;
            }
        }
    }
    else {
        for (var r = 1; r < grid.rows.length; r++) {
            var inputs = grid.rows[r].cells[1].getElementsByTagName("input");
            if (inputs.length > 0 && inputs[0].type === "checkbox" && inputs[0].checked) {
                header.checked = true;
                header.disabled = true;
                break;

            }
            else {
                header.checked = false;
                header.disabled = false;
            }
        }
    }
}
</script>

单选事件中,它有操作自己本身,还与全选Checkbox交互。
即是所有行没有选时,全选是可以选的。
所有数据行未全选,只是选中其中一些行时,全选CheckBox是禁用操作,但它是选中状态。
只有所有数据行被选时,全选的CheckBox是选中状态,它又可以操作。

功能算是实现。但是由于在asp:UpdatePanel环境中。程序有遇上IsPostBack时,它会有出现意外状态,如删除记录行,更新,甚至有数据行添加和页面重新加载时。
解决这些问题,可以添加下面代码来处理,
2026-04-02_10-14-23


2026-04-02_10-18-21

不完整小演示,
select all or single in gridview