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日

相关文章

  • ASP.NET中下载文件的几种实例代码

    ASP.NET中下载文件的几种实例代码可以分为以下几种: 方法1:使用Response对象下载文件 使用Response对象下载文件是最简单和直接的方式,可以在服务器端使用C#代码将文件发送到客户端。 protected void btnDownload_Click(object sender, EventArgs e) { string filePath …

    C# 2023年5月31日
    00
  • C#创建不规则窗体的4种方式详解

    C#创建不规则窗体的4种方式详解 简介 标准的窗体一般都是矩形,但是有时候我们可能需要创建一个不规则的窗体。本文将详细介绍C#创建不规则窗体的4种方式,并通过代码示例来演示。 方式一:使用无边框窗体并设置圆角 使用Form控件创建一个无边框窗体,然后通过设置圆角使其看起来像是一个不规则窗体。下面是一个简单的示例: public partial class I…

    C# 2023年6月7日
    00
  • 如何使用C#将Tensorflow训练的.pb文件用在生产环境详解

    我来为您详细讲解如何使用C#将Tensorflow训练的.pb文件用在生产环境。 背景介绍 Tensorflow是目前深度学习领域广泛使用的一个强大的开源库,它提供了许多的高级API和工具来帮助我们训练和使用深度学习模型。在Tensorflow中,模型可以被保存成一个.pb文件,该文件包含了模型的结构和参数信息,可以在需要的时候被载入到内存中进行推断。 在实…

    C# 2023年5月15日
    00
  • C#实现Json转Unicode的方法

    实现Json转Unicode是一个比较常见的需求,在C#中可以通过以下几个步骤完成。 1. 首先,需要引入Newtonsoft.Json库 Newtonsoft.Json是一个流行的C#第三方Json库,可以通过NuGet安装,也可以手动下载源代码引入项目中。如果使用Nuget安装可以运行以下命令: Install-Package Newtonsoft.Js…

    C# 2023年5月31日
    00
  • C# 脚本引擎CS-Script的使用

    C# 脚本引擎CS-Script的使用 什么是CS-Script? CS-Script是一个用于扩展C#应用程序的开源脚本引擎。它允许您在不编译代码的情况下运行C#脚本,这使得C#脚本可以用于快速手动测试代码、构建脚本和部署小型工具等场合。 安装CS-Script 您可以使用NuGet安装CS-Script。在Visual Studio的“NuGet包管理器…

    C# 2023年6月3日
    00
  • 轻松学习C#的ArrayList类

    轻松学习C#的ArrayList类 介绍 ArrayList是C#中的一个动态数组类,可以自动调整大小,支持任意数据类型的添加和移除。本文将提供一个完整的攻略,帮助你轻松学习并应用ArrayList。 创建ArrayList对象 你可以使用以下方法创建一个ArrayList对象: ArrayList list = new ArrayList(); 添加元素 …

    C# 2023年5月31日
    00
  • ASP.NET Core的日志系统介绍

    ASP.NET Core 的日志系统介绍 在 ASP.NET Core 中,日志系统是一个非常重要的组件,它可以帮助我们记录应用程序的运行状态和错误信息。本攻略将详细介绍 ASP.NET Core 的日志系统。 日志系统的作用 ASP.NET Core 的日志系统可以帮助我们记录应用程序的运行状态和错误信息,以便我们更好地了解应用程序的运行情况。日志系统可以…

    C# 2023年5月16日
    00
  • JavaScript ESLint插件保姆级使用教程

    JavaScript ESLint插件保姆级使用教程 1. 什么是ESLint ESLint是一个可扩展的JavaScript代码检查工具。它可以检查代码中的语法错误,提供一致的代码风格,并可以检测代码中的潜在问题。ESLint 可以配置以满足您的特定需求。ESLint内置了很多规则,您也可以通过使用插件来添加自定义规则。 2. 安装ESLint 2.1 安…

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