asp.net GridView模板列中实现选择行功能

要实现在GridView模板列中选择行的功能,可以采用以下步骤:

1.在GridView中添加模板列,并在模板列中添加一个复选框控件

<asp:GridView ID="GridView1" runat="server">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:CheckBox ID="CheckBox1" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

2.在GridView的RowDataBound事件中为模板列中的复选框控件添加相关事件处理程序

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        CheckBox chk = (CheckBox)e.Row.FindControl("CheckBox1");
        chk.Attributes["onclick"] = string.Format("toggleRowSelection(this,'{0}');", GridView1.ClientID);
    }
}

3.在页面中添加JavaScript脚本,定义toggleRowSelection函数来实现行的选择功能

<script type="text/javascript">
    function toggleRowSelection(chk, gridId) {
        var row = chk.parentNode.parentNode;
        if (chk.checked) {
            row.style.backgroundColor = '#FFFFC6';
        } else {
            row.style.backgroundColor = '';
        }
    }
</script>

其中,toggleRowSelection函数可以再根据需求进行修改和完善,也可以利用第三方框架或插件来实现更加丰富的功能。

示例1:

GridView的数据源为DataTable时,可以实现点击模板列中复选框控件时,同时选中或取消选中所属行的所有单元格,并在服务器端获取选中行的相关数据。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound1">
    <Columns>
        <asp:BoundField DataField="ID" HeaderText="ID" />
        <asp:BoundField DataField="Name" HeaderText="Name" />
        <asp:BoundField DataField="Age" HeaderText="Age" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:CheckBox ID="CheckBox1" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BindData();
    }
}

protected void BindData()
{
    DataTable dt = new DataTable();
    dt.Columns.Add("ID");
    dt.Columns.Add("Name");
    dt.Columns.Add("Age");
    for (int i = 1; i <= 5; i++)
    {
        DataRow row = dt.NewRow();
        row["ID"] = i;
        row["Name"] = "Name" + i;
        row["Age"] = i * 10;
        dt.Rows.Add(row);
    }
    GridView1.DataSource = dt;
    GridView1.DataBind();
}

protected void GridView1_RowDataBound1(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        CheckBox chk = (CheckBox)e.Row.FindControl("CheckBox1");
        chk.Attributes["onclick"] = string.Format("toggleRowSelection(this,'{0}');", GridView1.ClientID);
    }
}

protected void btnSubmit_Click(object sender, EventArgs e)
{
    List<string> selectedIDs = new List<string>();
    foreach (GridViewRow row in GridView1.Rows)
    {
        if (row.RowType == DataControlRowType.DataRow)
        {
            CheckBox chk = (CheckBox)row.FindControl("CheckBox1");
            if (chk.Checked)
            {
                string id = GridView1.DataKeys[row.RowIndex].Value.ToString();
                selectedIDs.Add(id);
            }
        }
    }
    //TODO:根据选中的ID处理相关业务逻辑
}

示例2:

通过Ajax异步请求方式在GridView中选择行,并实现选中行数的实时显示。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    OnRowDataBound="GridView1_RowDataBound2" GridLines="None">
    <Columns>
        <asp:BoundField DataField="ID" HeaderText="ID" />
        <asp:BoundField DataField="Name" HeaderText="Name" />
        <asp:BoundField DataField="Age" HeaderText="Age" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:CheckBox ID="CheckBox1" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<div>
    <input type="button" value="Submit" onclick="submitForm();" />
    <span id="selectedCount" style="color:red;"></span>
</div>
<script type="text/javascript">
    function toggleRowSelection(chk, gridId) {
        var row = chk.parentNode.parentNode;
        if (chk.checked) {
            row.style.backgroundColor = '#FFFFC6';
            row.setAttribute('isSelected', 'true');
        } else {
            row.style.backgroundColor = '';
            row.removeAttribute('isSelected');
        }
        updateSelectedCount(gridId);
    }

    function updateSelectedCount(gridId) {
        var selectedCount = 0;
        var grid = document.getElementById(gridId);
        if (grid) {
            for (var i = 1; i < grid.rows.length; i++) {
                var row = grid.rows[i];
                if (row.getAttribute('isSelected') == 'true') {
                    selectedCount++;
                }
            }
            document.getElementById('selectedCount').innerHTML = 'You have selected ' + selectedCount + ' row(s).';
        }
    }

    function submitForm() {
        var data = [];
        var grid = document.getElementById('<%=GridView1.ClientID%>');
        if (grid) {
            for (var i = 1; i < grid.rows.length; i++) {
                var row = grid.rows[i];
                if (row.getAttribute('isSelected') == 'true') {
                    var id = row.cells[0].innerHTML;
                    var name = row.cells[1].innerHTML;
                    var age = row.cells[2].innerHTML;
                    data.push({ ID: id, Name: name, Age: age });
                }
            }
        }
        if (data.length > 0) {
            var param = JSON.stringify({ dataList: data });
            $.ajax({
                type: 'POST',
                contentType: 'application/json; charset=utf-8',
                url: 'Default.aspx/ProcessData',
                data: param,
                dataType: 'json',
                success: function (response) {
                    alert(response.d);
                },
                error: function (xhr, status, error) {
                    alert(error);
                }
            });
        } else {
            alert('Please select some rows first.');
        }
    }
</script>
[WebMethod]
public static string ProcessData(List<GridViewDataItem> dataList)
{
    string result = string.Empty;
    if (dataList != null && dataList.Count > 0)
    {
        StringBuilder sb = new StringBuilder();
        foreach (GridViewDataItem item in dataList)
        {
            sb.AppendFormat("ID={0},Name={1},Age={2}", item.ID, item.Name, item.Age);
            sb.AppendLine();
        }
        result = sb.ToString().Trim();
    }
    return result;
}

protected void GridView1_RowDataBound2(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        CheckBox chk = (CheckBox)e.Row.FindControl("CheckBox1");
        chk.Attributes["onclick"] = string.Format("toggleRowSelection(this,'{0}');", GridView1.ClientID);
    }
}

public class GridViewDataItem
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

其中,使用了jQuery库来实现Ajax异步请求,并通过WebMethod来处理服务器端返回的数据。在页面中添加了一个Submit按钮和一个显示选中行数的span元素。选中行数功能的实现通过updateSelectedCount函数来实现,具体实现方式是遍历GridView每一行的Dom元素,查找带有isSelected属性的行,并根据这些行的数量来更新选中行数的显示。最终的提交操作则通过submitForm函数来实现,这个函数首先将选中的行数据组装成JSON格式的参数,然后发起Ajax异步请求来向服务器端提交数据,处理结果将通过alert方式来显示给用户。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:asp.net GridView模板列中实现选择行功能 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • C#实现如何使用短信平台自动通知用户实例

    C#实现使用短信平台自动通知用户 简介 短信通知是现在很多网站或应用程序都采用的一种通知方式,以及提供给客户服务的一种方式。本文将讲解如何使用C#实现自动向用户发送短信通知。 步骤 选择短信平台 首先需要选择一家短信平台进行合作,目前市面上主流的短信平台有阿里云短信、腾讯云短信、云之讯等,选择平台需考虑到短信发送成功率、价格等相关因素。 注册并获取短信API…

    C# 2023年6月6日
    00
  • 使用C#获取系统特殊文件夹路径的解决方法

    当我们搭建一个桌面应用程序时,需要获取一些系统特殊文件夹的路径,比如应用程序数据文件夹、用户文档文件夹等。使用C#可以方便地获取这些文件夹路径,下面是一些详细的攻略介绍。 1. 使用Environment.SpecialFolder枚举获取系统特殊文件夹路径 Environment.SpecialFolder枚举包含了系统特殊文件夹的名称,可以通过该枚举获取…

    C# 2023年6月7日
    00
  • ASP.NET Core学习之使用JWT认证授权详解

    ASP.NET Core学习之使用JWT认证授权详解 在ASP.NET Core应用程序中,JWT(JSON Web Token)是一种流行的认证和授权机制。JWT是一种安全的、基于标准的方法,用于在客户端和服务器之间传递信息。本攻略将深入探讨如何在ASP.NET Core中使用JWT进行认证和授权,并提供两个示例说明。 安装JWT 在ASP.NET Cor…

    C# 2023年5月17日
    00
  • C#实现日期时间的格式化输出的示例详解

    C#实现日期时间的格式化输出的示例详解 在C#中,我们经常需要使用日期时间类型进行操作,而日期时间的输出格式化是常见的需求之一。本文将详细讲解如何使用C#实现日期时间的格式化输出。 日期时间输出格式化方法 在C#中,我们可以使用ToString()函数将日期时间格式化为指定的字符串。ToString()函数有多个重载形式,其中最常用的是将格式字符串作为参数的…

    C# 2023年6月1日
    00
  • .NET Core使用Worker Service创建服务

    .NET Core是一个面向现代应用程序的跨平台开源框架,支持Windows、Linux和Mac等多种操作系统。在.NET Core中,Worker Service是一个用于开发长时间运行Windows服务、Linux daemon、控制台应用程序的框架,通常用于后台处理任务、服务监控和数据同步等场景。下面是使用Worker Service创建服务的完整攻略…

    C# 2023年6月3日
    00
  • C#中反射和扩展方法如何运用

    反射是C#语言中非常重要的一个特性,它可以在运行时动态地获取程序集中的各种信息(例如类型、属性、方法等),并且可以在不知道类型的情况下与它进行交互。扩展方法则是我们定义的一组静态方法,它们能够对现有的类进行扩展,而不用修改原来的代码。本次攻略将详细讲解C#中反射和扩展方法的使用方式,并通过两个示例来说明。 反射的使用 获取类型信息 在C#中,我们可以通过反射…

    C# 2023年6月6日
    00
  • WinForm IP地址输入框控件实现

    WinForm 的 IP 地址输入框控件通常用于用户输入 IPv4 地址时,这个控件会自动把输入的字符串分隔成四个,允许的数字范围在 0 到 255 之间的数字。以下是实现这个控件的攻略: 步骤一:创建自定义控件类 首先,我们需要创建一个继承自 TextBox 的类,并将其命名为 IPTextBox。在这个类中,我们需要添加一个后缀为 “IP” 的属性,以检…

    C# 2023年6月1日
    00
  • 解析C#中的常量及如何在C#编程中定义常量

    下面是详细的解析C#中的常量及如何在C#编程中定义常量的攻略。 什么是常量 常量是在程序执行期间无法修改其值的数据。在C#中,常量使用 const 关键字进行定义,一旦被定义,其值将不能被修改。 定义常量 常量定义的语法格式如下: const <数据类型> <常量名称> = <常量值>; 以下是两个使用 const 关键字…

    C# 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部