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#键盘勾子(Hook)拦截器,屏蔽键盘活动的详解

    深入分析C#键盘勾子(Hook)拦截器,屏蔽键盘活动的详解 前言 在一些场景下,我们可能需要屏蔽用户在键盘上的操作,例如游戏或者安全软件中。在 Windows 系统中,我们可以通过 C# 键盘勾子 (Hook) 拦截器来实现这个目的,本文就来详细解析这个过程。 键盘勾子概述 键盘勾子是一种为全局键盘事件提供监视的技术。我们通过注册一些事件,例如钩子事件、击键…

    C# 2023年5月15日
    00
  • C#利用ReportViewer生成报表

    首先我们要了解一下ReportViewer是什么: ReportViewer是一个用于展示和生成报表的控件,可以直接在Visual Studio工具箱中找到。它可以与多种数据源连接,包括SQL Server、Access、Excel、Oracle等。使用ReportViewer可以帮助我们轻松地生成各种报表,如图表、列表、矩阵等。 下面是在C#中利用Repo…

    C# 2023年6月7日
    00
  • C#多线程系列之读写锁

    C# 多线程系列之读写锁 什么是读写锁? 读写锁允许同时有多个线程来读取共享资源,但一次只允许一个线程来写入共享资源。这可能会带来一些好处,比如更快的数据访问速度。 读写锁的基本思想是: 如果它是一个读访问,它可以并发进行。 如果它是一个写入访问,则它需要独占式地进行。 读写锁的实现方式 ReaderWriterLock 在 .NET Framework 3…

    C# 2023年6月1日
    00
  • ASP.NET MVC中两个配置文件的作用详解

    当我们使用ASP.NET MVC框架来开发一个网站时,我们需要先了解两个配置文件的作用,这些配置文件可以帮助我们更好地配置和管理应用程序。它们分别是Web.Config和RouteConfig.cs。 Web.Config Web.config文件是一个XML文件,它包含了ASP.NET应用程序的配置信息,包括应用程序的全局设置、数据库连接字符串、应用程序级…

    C# 2023年6月3日
    00
  • C#中volatile与lock用法

    下面详细讲解一下C#中volatile与lock关键字的用法。 volatile关键字的用法 简介 在多线程编程中,由于CPU对内存的读写可能存在缓存,当多个线程同时操作同一个变量时,就可能出现线程安全问题。而volatile关键字则可以保证被修饰的变量在多线程操作中的可见性和顺序性,即保证多线程程序中的变量修改都能在所有线程中可见。 用法 volatile…

    C# 2023年6月7日
    00
  • Linux服务器下利用Docker部署.net Core项目的全过程

    Linux服务器下利用Docker部署.NET Core项目的全过程 Docker是一种轻量级的容器化技术,可以让您更轻松地部署和管理应用程序。本攻略将详细介绍如何在Linux服务器上利用Docker部署.NET Core项目的全过程。 准备工作 在开始之前,您需要完成以下准备工作: 在Linux服务器上安装Docker。 在Linux服务器上安装.NET …

    C# 2023年5月16日
    00
  • c# 断点续传的实现

    C# 断点续传的实现攻略 什么是断点续传 断点续传是指当网络传输中断或者用户主动暂停传输时,继续从中断或者暂停的地方继续传输,以达到复制大文件的目的。断点续传技术可以减少文件传输的时间,同时避免重复传输已经传输过的文件,减轻服务器负担,提高传输成功率和效率。 在 C# 中,我们可以通过一些类库和方法来实现断点续传功能。 实现断点续传的步骤 以下是基本的实现步…

    C# 2023年6月6日
    00
  • 区分WCF与WebService的异同、优势

    区分WCF与WebService的异同、优势 WCF(Windows Communication Foundation)和WebService都是用于构建分布式应用程序的技术。它们都可以实现跨平台、跨语言的通信,但在实现方式、功能和性能等方面存在一些差异。本文将详细讲解WCF和WebService的异同、优势,并提供两个示例。 WCF与WebService的…

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