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

yizhihongxing

下面我会详细讲解如何在 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日

相关文章

  • WinForm天猫双11自动抢红包源码分享

    下面我将详细讲解“WinForm天猫双11自动抢红包源码分享”的完整攻略,包含以下内容: 相关工具和环境准备 抓包获取天猫双11红包API 编写WinForm自动化程序 实现自动抢红包功能 代码分享和使用建议 1. 相关工具和环境准备 首先,我们需要准备以下工具: Visual Studio 2019 Fiddler 4 Fiddler是一款常用的HTTP/…

    C# 2023年5月15日
    00
  • C# Volatile的具体使用

    关于C#中Volatile的具体使用,我先介绍一下Volatile的作用和用途。Volatile是C#中用来保证多线程并发访问共享变量时线程安全的一种机制。当一个变量被声明为Volatile类型后,就可以保证多个线程并发访问这个变量时,数据不会出现意外的错误(比如数据不一致、数据丢失等)。 Volatile变量的特点是每次访问都是直接从内存中读取或写入变量的…

    C# 2023年5月15日
    00
  • C# 代码大小写规范说明

    下面是关于“C# 代码大小写规范说明”的详细攻略。 一、概述 在编写C#代码时,遵守严格的大小写规范是很重要的。正确使用大小写不仅有助于提高代码的可读性,还能减少在编译时出现的错误。 在制定C#代码大小写规范时,应该遵循以下一般原则: 符号和关键字应该全部使用小写字母; 类和命名空间应该以大写字母开头,其余部分全部使用小写字母; 方法和变量名应该以小写字母开…

    C# 2023年6月6日
    00
  • C#中把字符串String转换为整型Int的小例子

    下面是详细讲解“C#中把字符串String转换为整型Int的小例子”的攻略: 准备工作 首先,我们需要确保我们已经安装并配置好了C#开发环境。如果还没有的话可以前往官网下载安装。 字符串与整型类型间的转换 在C#中,将字符串转换为整型类型可以使用Convert.ToInt32()方法,也可以使用int.Parse()方法。这两个方法都可以将字符串转换为整型类…

    C# 2023年6月1日
    00
  • winform获取当前名称实例汇总

    要实现WinForm获取当前名称实例的功能,我们可以使用以下步骤: 1.使用System.Diagnostics.Process类获取当前正在运行的所有进程。 using System.Diagnostics; Process[] processes = Process.GetProcesses(); 2.使用LINQ查询找到我们需要的进程实例。 Proce…

    C# 2023年6月7日
    00
  • C#数组应用分析第2/2页

    C#数组应用分析攻略 什么是数组 数组是一种数据结构,它是相同数据类型的一组元素的集合。数组中的元素通过使用数组下标进行访问。C#中的数组是由系统分配的内存块。数组中的元素在内存中是连续排列的。 数组的声明 在C#中,可以通过以下方式声明一个数组: // 声明一个int类型的数组,长度为4 int[] numbers = new int[4]{1, 2, 3…

    C# 2023年6月3日
    00
  • C# 获取数据库中所有表名、列名的示例代码

    下面是关于“C# 获取数据库中所有表名、列名的示例代码”的完整攻略,以及两条示例说明。 攻略 获取数据库中所有表名、列名可以利用C#中的数据库元数据操作。可通过ADO.NET提供的DbConnection或DbDataReader对象访问元数据,其方法包括GetSchema等。这些方法可以获取关于数据库架构的信息。 下面是获取MySQL数据库中所有表名的示例…

    C# 2023年5月31日
    00
  • C#中string.format用法详解

    下面是详细讲解“C#中string.format用法详解”的完整攻略。 1. string.format简介 C#中的字符串是由System.String类实现的,使用大量的内部标准函数。在C#中,可以使用多种方式来格式化字符串,使用C#中的string.format函数是其中一种。 string.format是一个静态方法,它可以将一个或多个对象的字符串表…

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