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#自带的Directory类中的GetFiles方法。下面是详细的实现方法: 步骤1:引用命名空间 首先我们需要在代码中引用System.IO命名空间,这个命名空间中包含了许多文件和文件夹相关的类。 using System.IO; 步骤2:编写获取文件名的方法 我们将编写的方法命名为GetF…

    C# 2023年6月2日
    00
  • C# form-data上传图片流到远程服务器的详细代码

    下面是详细的C# form-data上传图片流到远程服务器的攻略: 前提准备 在进行上传前需要确保满足以下条件: 需要有已经存在的图片文件或者是通过二进制转换后的图片流数据; 需要有正确的接口地址和接口方法,确保能够将图片数据发送到正确的服务器地址。 代码实现 1. 使用HttpWebRequest实现图片上传 使用HttpWebRequest进行图片上传的…

    C# 2023年6月7日
    00
  • C# 字符串的连接(实例讲解)

    C# 字符串的连接(实例讲解) C# 中,字符串连接可以通过加号 “+” 或者 String.Concat 方法实现。在本文中,我们将介绍如何使用这些方法来连接 C# 字符串,并提供一些实例讲解。 使用加号 “+” 加号 “+” 是最简单的字符串连接方法。通过在两个字符串之间添加加号即可将它们连接在一起,得到一个新的字符串。例如: string str1 =…

    C# 2023年6月7日
    00
  • C# Linq的SkipWhile()方法 – 跳过序列中的元素,直到某个元素不满足

    下面是关于 C# Linq 的 SkipWhile() 的完整攻略。 SkipWhile() 简介 SkipWhile() 方法是 C# Linq 中的一种用来过滤序列的方法,其参数为一个带有一个参数和一个返回bool类型的委托,该委托定义了决定跳过哪些元素的方法。SkipWhile() 方法会跳过序列中开头符合条件的元素,直到遇到第一个不符合条件的元素为止…

    C# 2023年4月19日
    00
  • Asp.Net Core利用文件监视进行快速测试开发详解

    Asp.Net Core利用文件监视进行快速测试开发详解 在Asp.Net Core中,我们可以利用文件监视(File Watcher)来进行快速测试开发。文件监视可以在文件发生更改时自动重新编译和重新启动应用程序,从而加快开发速度。在本攻略中,我们将深入讲解如何利用文件监视进行快速测试开发,并提供两个示例说明。 步骤 以下是利用文件监视进行快速测试开发的步…

    C# 2023年5月17日
    00
  • Entity Framework Core基于数据模型创建数据库

    当使用Entity Framework Core (EF Core) 来开发应用的时候,我们经常需要创建数据库。在基于EF Core的开发中,我们可以通过数据模型(Model)来创建数据库。 下面是详细的操作步骤: 1.创建ASP.NET Core Web应用 首先创建一个名为“EFCoreDemo”的ASP.NET Core Web应用。可以通过使用Vis…

    C# 2023年5月31日
    00
  • 解析.NET中几种Timer的使用

    解析.NET中几种Timer的使用 在.NET平台下,有多种Timer,包括System.Timers.Timer、System.Threading.Timer等。本文将对这些Timer进行详细讲解,让您可以选择最适合您需求的Timer进行使用。 System.Timers.Timer System.Timers.Timer是一个基于事件的Timer,可以在…

    C# 2023年6月1日
    00
  • C# 实现抓包的实例代码

    下面是详细的“C# 实现抓包的实例代码”的攻略。 一、背景介绍 在网络通讯过程中,我们需要获取通讯双方的数据,这个获取的过程就是网络抓包。在 C# 中,我们可以通过使用第三方库 SharpPcap 实现抓包。下面将会对使用 SharpPcap 进行网络抓包的实现过程进行详细讲解。 二、环境准备 在进行网络抓包之前,需要在计算机上安装 WinPcap。WinP…

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