asp.net中gridview的查询、分页、编辑更新、删除的实例代码

下面我会详细讲解如何在 ASP.NET 中使用 GridView 控件实现数据的查询、分页、编辑更新和删除操作。

1. GridView 的基本使用

GridView 控件是 ASP.NET 中用于展示数据的常用控件之一,通常用于展示数据列表。它可以从数据源中获取数据并将数据呈现为表格形式,在网页中显示出来。GridView 控件支持分页、排序和编辑更新等功能。它的基本语法如下:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"  DataKeyNames="ID">
    <Columns>
        <asp:BoundField DataField="ID" HeaderText="ID" ReadOnly="True" SortExpression="ID" />
        <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
        <asp:BoundField DataField="Age" HeaderText="Age" SortExpression="Age" />
        <asp:ButtonField ButtonType="Button" CommandName="Edit" Text="Edit" />
        <asp:ButtonField ButtonType="Button" CommandName="Delete" Text="Delete" />
    </Columns>
</asp:GridView>

其中,AutoGenerateColumns="False" 表示关闭自动生成列的功能,数据列需要手动添加。DataKeyNames 表示指定数据绑定时使用的主键字段。数据列可以使用 BoundField 控件添加,按钮列可以使用 ButtonField 控件添加。

2. 数据绑定

GridView 控件支持多种数据源,如 SQL Server、Oracle、Access 和 XML 等。下面以 SQL Server 为例,演示如何绑定数据源。

2.1 配置连接字符串

在 web.config 文件中添加数据库连接字符串,内容如下:

<connectionStrings>
  <add name="ConnectionString" connectionString="Data Source=localhost;Initial Catalog=TestDB;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>

其中,ConnectionString 表示连接字符串的名称,Data Source 表示数据库服务器的名称,Initial Catalog 表示数据库的名称,Integrated Security 表示使用 Windows 身份验证方式。

2.2 添加数据源

在页面中添加 SqlDataSource 控件用于绑定数据源,内容如下:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
    SelectCommand="SELECT [ID], [Name], [Age] FROM [UserInfo]">
</asp:SqlDataSource>

其中,ConnectionString 属性表示连接字符串名称,SelectCommand 属性表示 SQL 查询语句。

2.3 绑定数据

将 GridView 控件和数据源绑定在一起,实现数据的展示。代码如下:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="SqlDataSource1">
    <Columns>
        <asp:BoundField DataField="ID" HeaderText="ID" ReadOnly="True" SortExpression="ID" />
        <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
        <asp:BoundField DataField="Age" HeaderText="Age" SortExpression="Age" />
        <asp:ButtonField ButtonType="Button" CommandName="Edit" Text="Edit" />
        <asp:ButtonField ButtonType="Button" CommandName="Delete" Text="Delete" />
    </Columns>
</asp:GridView>

其中,DataSourceID 属性表示指定数据源控件的 ID。

3. GridView 的分页

GridView 控件内置了分页功能,可以使用 PagerTemplate 控件指定分页模板,并设置其分页方式。分页方式包括:自动分页和手动分页两种。

3.1 自动分页

使用自动分页可以设置分页的页面大小,GridView 控件会自动根据页面大小分页。示例代码如下:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="SqlDataSource1" PageSize="5">
    <Columns>
        <asp:BoundField DataField="ID" HeaderText="ID" ReadOnly="True" SortExpression="ID" />
        <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
        <asp:BoundField DataField="Age" HeaderText="Age" SortExpression="Age" />
        <asp:ButtonField ButtonType="Button" CommandName="Edit" Text="Edit" />
        <asp:ButtonField ButtonType="Button" CommandName="Delete" Text="Delete" />
    </Columns>
    <PagerSettings Mode="NumericFirstLast" />
    <PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Center" />
</asp:GridView>

其中,PageSize 属性表示每页显示的记录数,PagerSettingsPagerStyle 分别指定分页样式和分页控件的设置。

3.2 手动分页

使用手动分页需要在代码中实现分页功能,示例代码如下:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BindData();
    }
}

private void BindData()
{
    string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        conn.Open();
        string sql = "SELECT COUNT(ID) FROM UserInfo";
        SqlCommand cmd = new SqlCommand(sql, conn);
        int count = (int)cmd.ExecuteScalar();
        int pageSize = 5;
        int pageNum = (int)Math.Ceiling((double)count / pageSize);
        ViewState["PageNum"] = pageNum;
        ViewState["PageIndex"] = 1;
        BindPage();
        BindGridView();
    }
}

private void BindPage()
{
    int pageNum = (int)ViewState["PageNum"];
    int pageIndex = (int)ViewState["PageIndex"];
    StringBuilder sb = new StringBuilder();
    sb.Append("<div>");
    for (int i = 1; i <= pageNum; i++)
    {
        if (i == pageIndex)
            sb.Append("<span>" + i + "</span>");
        else
            sb.Append("<a href='#' onclick='gotoPage(" + i + ")'>" + i + "</a>");
    }
    sb.Append("</div>");
    Literal1.Text = sb.ToString();
}

private void BindGridView()
{
    int pageSize = 5;
    int pageIndex = (int)ViewState["PageIndex"];
    string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        conn.Open();
        string sql = "SELECT TOP " + pageSize + " * FROM (SELECT ROW_NUMBER() OVER (ORDER BY ID DESC) AS RowNumber,ID,Name,Age FROM UserInfo) AS T WHERE RowNumber > " + (pageIndex - 1) * pageSize + " ORDER BY ID DESC";
        SqlDataAdapter da = new SqlDataAdapter(sql, conn);
        DataSet ds = new DataSet();
        da.Fill(ds);
        GridView1.DataSource = ds.Tables[0];
        GridView1.DataBind();
    }
}

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
    GridView1.EditIndex = e.NewEditIndex;
    BindGridView();
}

protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
    GridView1.EditIndex = -1;
    BindGridView();
}

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    int id = (int)GridView1.DataKeys[e.RowIndex].Value;
    string name = e.NewValues["Name"].ToString();
    int age = int.Parse(e.NewValues["Age"].ToString());
    string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        conn.Open();
        string sql = "UPDATE UserInfo SET Name=@Name, Age=@Age WHERE ID=@ID";
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.Parameters.AddWithValue("@Name", name);
        cmd.Parameters.AddWithValue("@Age", age);
        cmd.Parameters.AddWithValue("@ID", id);
        cmd.ExecuteNonQuery();
    }
    GridView1.EditIndex = -1;
    BindGridView();
}

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    int id = (int)GridView1.DataKeys[e.RowIndex].Value;
    string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        conn.Open();
        string sql = "DELETE FROM UserInfo WHERE ID=@ID";
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.Parameters.AddWithValue("@ID", id);
        cmd.ExecuteNonQuery();
    }
    GridView1.EditIndex = -1;
    BindGridView();
}

protected void LinkButton1_Click(object sender, EventArgs e)
{
    int pageIndex = (int)ViewState["PageIndex"];
    if (pageIndex > 1)
    {
        ViewState["PageIndex"] = pageIndex - 1;
        BindPage();
        BindGridView();
    }
}

protected void LinkButton2_Click(object sender, EventArgs e)
{
    int pageIndex = (int)ViewState["PageIndex"];
    int pageNum = (int)ViewState["PageNum"];
    if (pageIndex < pageNum)
    {
        ViewState["PageIndex"] = pageIndex + 1;
        BindPage();
        BindGridView();
    }
}

protected void LinkButton3_Click(object sender, EventArgs e)
{
    int pageNum = (int)ViewState["PageNum"];
    ViewState["PageIndex"] = pageNum;
    BindPage();
    BindGridView();
}

protected void LinkButton4_Click(object sender, EventArgs e)
{
    ViewState["PageIndex"] = 1;
    BindPage();
    BindGridView();
}

手动分页涉及到页面大小、总记录数、总页数、当前页码和分页控件等多个变量,需要在代码中进行维护,比较麻烦。此外,还需要为分页控件添加事件以实现分页的操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:asp.net中gridview的查询、分页、编辑更新、删除的实例代码 - Python技术站

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

相关文章

  • C# Unity使用正则表达式去除部分富文本的代码示例

    当我们在使用C#和Unity开发中使用富文本时,有时候需要剔除部分富文本的内容,这时我们可以使用正则表达式来实现。下面我将针对此问题给出一份完整的攻略。 一、为什么需要使用正则表达式? 在Unity中使用富文本时,我们通常会使用<color>、<size>、<b>等标签来进行文字样式的设置。但是在某些情况下,我们可能需要删…

    C# 2023年6月3日
    00
  • C#实现简单聊天程序的方法

    C#是一种非常强大的编程语言,可以用来实现各种各样的应用程序,包括聊天程序。下面是实现简单聊天程序的方法: 第一步:创建Socket 在C#中实现聊天程序的第一步是创建Socket。Socket是通信协议的一个抽象概念,它提供了一种可以在网络上发送和接收数据的方法。在C#中,可以使用System.Net.Sockets.Socket类创建Socket。 us…

    C# 2023年6月7日
    00
  • C#实现发送手机验证码功能

    一、生成验证码 使用Random类生成随机数字或字母,示例代码如下: Random random = new Random(); string code = ""; for (int i = 0; i < 6; i++) { code += random.Next(10); } 将随机生成的验证码保存到Session中,代码如下: …

    C# 2023年6月6日
    00
  • asp.net运行提示未将对象引用设置到对象的实例错误解决方法

    下面我会为您详细讲解“ASP.NET运行提示未将对象引用设置到对象的实例错误解决方法”的攻略。 什么是“未将对象引用设置到对象的实例”错误? 当在ASP.NET应用程序中使用对象的实例的属性或方法时,如果该对象实例为null或未被初始化,则会抛出“未将对象引用设置到对象的实例”错误。 例如下面这段代码: string str = null; int leng…

    C# 2023年5月31日
    00
  • 基于一个应用程序多线程误用的分析详解

    基于一个应用程序多线程误用的分析详解 研究目的 本研究旨在探究在多线程应用程序开发中常见的误用,分析其原因以及给出解决方案。 误用场景 多线程应用程序开发中,最常见的误用场景之一就是未正确使用锁机制,导致多个线程访问共享资源时出现竞态条件,从而引发意外的程序崩溃或执行异常。在此,我们将对锁机制的误用进行详细分析。 常见的锁机制误用 锁粒度过小 当多个线程对同…

    C# 2023年5月14日
    00
  • asp.net创建位图生成验证图片类(验证码类)

    下面是“ASP.NET创建位图生成验证图片类(验证码类)”的完整攻略: 什么是验证码 验证码是为了防止机器人恶意攻击而设置的一种机制。它一般是一张由数字或字母组成的随机图片,用户需要在文本框中输入正确的验证码,才能通过验证并继续执行后续的操作。所以,验证码一般被用于用户登录、注册、评论等操作中,以保障网站安全。 创建验证码类 1. 准备工作 准备一个名为“V…

    C# 2023年5月31日
    00
  • C# 获取枚举值的简单实例

    获取枚举值是 C# 开发中比较基础的操作,以下是一个简单的实例,帮助大家快速了解如何获取枚举值。 前提条件 在代码中定义一个枚举类型: enum DaysOfWeek {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday } 实现获取枚举值 方式一 可以通过 Enum 类的 GetNa…

    C# 2023年6月7日
    00
  • C# Socket数据接收的三种实现方式

    C# Socket数据接收的三种实现方式 前言 在网络通信过程中,数据的传递是至关重要的一个环节,而数据的收发是Socket编程中最为重要的操作之一。本文将探讨Socket数据接收方面的内容,介绍C# Socket数据接收的三种实现方式。 Socket数据接收的三种实现方式 在C# Socket编程中,Socket数据接收主要有以下三种实现方式: 阻塞式接收…

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