gridview控件使用详解

GridView是ASP.NET Web Forms中最常用的控件之一,它代表了一个可编辑和可定制的网格视图,通常用于呈现和编辑数据。本文将详细介绍GridView控件的用法,包括控件属性和样式的定制、与数据源的绑定、事件的处理等内容。

一、GridView控件的基本用法

在ASP.NET Web Forms项目中,使用GridView控件非常简单。首先,在页面上添加一个GridView控件,如下所示:

```html

```

接下来,我们需要为GridView控件绑定数据源。GridView控件可以绑定各种类型的数据源,包括数据表、数组、集合等。下面是一个例子,使用SqlDataSource绑定数据库中的一张表:

```html

ConnectionString="<%$ ConnectionStrings:ConnectionString %>"

SelectCommand="SELECT * FROM Customers">

```

在这个例子中,我们使用了SqlDataSource控件来连接数据库,并在GridView控件中使用它作为数据源。当GridView控件绑定数据源后,就可以自动显示数据并支持编辑、排序、分页等功能。

二、GridView控件的属性和样式定制

通过修改属性和样式,可以定制GridView控件的外观和行为。下面介绍常用的属性和样式:

1. AutoGenerateColumns

AutoGenerateColumns属性用于指定GridView控件是否自动生成列。如果设置为True,则GridView控件会自动为绑定的数据源生成列;如果设置为False,则需要手动指定列信息。默认值为True。

```html

AutoGenerateColumns="False">

```

2. AllowPaging

AllowPaging属性用于指定GridView控件是否支持分页。如果设置为True,则GridView控件会根据PageSize属性分页显示数据;如果设置为False,则会将所有数据显示在一起。默认值为False。

```html

AllowPaging="True" PageSize="10">

```

在这个例子中,我们将PageSize属性设置为10,表示每页显示10条数据。

3. HeaderStyle和RowStyle

HeaderStyle属性用于指定GridView控件表头的样式,RowStyle属性用于指定GridView控件行的样式。

```html

HeaderStyle-BackColor="#336699" HeaderStyle-ForeColor="White"

RowStyle-BackColor="#F7F6F3" RowStyle-ForeColor="#333333">

```

在这个例子中,我们设置表头的背景颜色为#336699,前景颜色为白色;行的背景颜色为#F7F6F3,前景颜色为#333333。

4. EditIndex

EditIndex属性用于指定GridView控件中当前编辑的行的索引。通常在RowEditing事件中将该属性设置为当前行的索引,然后在RowUpdating事件中实现更新操作。

```html

AutoGenerateEditButton="True" OnRowEditing="GridView1_RowEditing"

OnRowUpdating="GridView1_RowUpdating" OnRowCancelingEdit="GridView1_RowCancelingEdit">

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)

{

GridView1.EditIndex = e.NewEditIndex;

}

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)

{

// 更新操作

}

protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)

{

GridView1.EditIndex = -1;

}

```

在这个例子中,我们设置AutoGenerateEditButton属性为True,表示自动生成编辑按钮;并在RowEditing事件中将EditIndex属性设置为当前行的索引,在RowUpdating事件中实现更新操作,在RowCancelingEdit事件中将EditIndex属性设置为-1,取消编辑状态。

5. OnRowDataBound事件

OnRowDataBound事件是在GridView控件的每一行数据绑定到网格之前发生的。我们可以在该事件中修改行的样式、设置ToolTip等。下面是一个例子,当某一列的值等于特定值时,设置该行的背景色为#FFBB77:

```html

OnRowDataBound="GridView1_RowDataBound">

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

{

if (e.Row.RowType == DataControlRowType.DataRow)

{

if (e.Row.Cells[1].Text == "特定值")

{

e.Row.BackColor = System.Drawing.ColorTranslator.FromHtml("#FFBB77");

}

}

}

```

在这个例子中,我们在OnRowDataBound事件中判断当前行是否为数据行,再判断特定列的值是否为“特定值”,如果是,则将该行的背景色设置为#FFBB77。

三、GridView控件与数据源的绑定

GridView控件支持多种数据源的绑定方式,包括SqlDataSource、ObjectDataSource、XmlDataSource等。其中,SqlDataSource较为常见,下面介绍如何使用SqlDataSource绑定GridView控件。

1. 基本用法

在前面的例子中,我们已经介绍了如何使用SqlDataSource控件绑定GridView控件。下面再介绍一种基本用法,直接在GridView控件中指定SQL语句,如下所示:

```html

ConnectionString="<%$ ConnectionStrings:ConnectionString %>"

SelectCommand="SELECT * FROM Customers">

```

在这个例子中,我们在GridView控件中内嵌SqlDataSource控件,并在SqlDataSource控件中指定SQL语句。这种方式比较适合简单的查询操作,但通常不推荐在实际开发中使用。

2. 高级用法

在实际开发中,我们通常需要使用较为复杂的查询语句,并且需要支持数据更新、插入、删除等操作。为了实现这些功能,可以通过代码绑定的方式来绑定GridView控件和SqlDataSource控件。下面是一个例子:

```html

OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating"

OnRowDeleting="GridView1_RowDeleting" OnRowCancelingEdit="GridView1_RowCancelingEdit">

ConnectionString="<%$ ConnectionStrings:ConnectionString %>"

SelectCommand="SELECT * FROM Customers"

UpdateCommand="UPDATE Customers SET CompanyName=@CompanyName WHERE CustomerID=@CustomerID"

InsertCommand="INSERT INTO Customers (CustomerID, CompanyName, ContactName) VALUES (@CustomerID, @CompanyName, @ContactName)"

DeleteCommand="DELETE FROM Customers WHERE CustomerID=@CustomerID">

```

在这个例子中,我们通过手动指定SelectCommand、UpdateCommand、InsertCommand、DeleteCommand等属性的方式,控制SqlDataSource控件的行为。然后在GridView控件中添加CommandField列,实现编辑和删除功能。同时,在GridView控件的事件中,需要实现修改、插入、删除等操作。

四、GridView控件的事件处理

GridView控件支持多种事件,包括RowDataBound、RowEditing、RowUpdating、RowDeleting等。下面介绍常用事件的处理方法:

1. RowEditing事件

在RowEditing事件中,我们可以将当前行切换为编辑状态:

```html

OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating"

OnRowCancelingEdit="GridView1_RowCancelingEdit">

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)

{

GridView1.EditIndex = e.NewEditIndex;

}

```

2. RowUpdating事件

在RowUpdating事件中,我们需要实现更新操作。首先需要获取当前行的数据,然后将它更新到数据库中:

```html

OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating"

OnRowCancelingEdit="GridView1_RowCancelingEdit">

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)

{

GridViewRow row = GridView1.Rows[e.RowIndex];

string customerId = row.Cells[0].Text;

string companyName = ((TextBox)row.Cells[1].Controls[0]).Text;

// 更新操作

}

```

在这个例子中,我们首先获取当前行的CustomerID和CompanyName值,然后执行更新操作。

3. RowDeleting事件

在RowDeleting事件中,我们需要实现删除操作。首先需要获取当前行的数据,然后将它从数据库中删除:

```html

OnRowDeleting="GridView1_RowDeleting">

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)

{

GridViewRow row = GridView1.Rows[e.RowIndex];

string customerId = row.Cells[0].Text;

// 删除操作

}

```

在这个例子中,我们首先获取当前行的CustomerID值,然后执行删除操作。

4. RowCanceledingEdit事件

在RowCanceledingEdit事件中,我们需要将当前行的编辑状态取消:

```html

OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating"

OnRowCancelingEdit="GridView1_RowCancelingEdit">

protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)

{

GridView1.EditIndex = -1;

}

```

在这个例子中,我们将EditIndex属性设置为-1,表示取消当前行的编辑状态。

五、使用案例

下面是一个完整的使用GridView控件的示例代码:

```html

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebFormsApp.GridViewDemo" %>

GridView Demo

OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating"

OnRowDeleting="GridView1_RowDeleting" OnRowCancelingEdit="GridView1_RowCancelingEdit">

ConnectionString="<%$ ConnectionStrings:ConnectionString %>"

SelectCommand="SELECT * FROM Customers"

UpdateCommand="UPDATE Customers SET CompanyName=@CompanyName, ContactName=@ContactName WHERE CustomerID=@CustomerID"

InsertCommand="INSERT INTO Customers (CustomerID, CompanyName, ContactName) VALUES (@CustomerID, @CompanyName, @ContactName)"

DeleteCommand="DELETE FROM Customers WHERE CustomerID=@CustomerID">

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

namespace WebFormsApp

{

public partial class GridViewDemo : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

BindData();

}

}

private void BindData()

{

GridView1.DataBind();

}

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)

{

GridView1.EditIndex = e.NewEditIndex;

BindData();

}

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)

{

GridViewRow row = GridView1.Rows[e.RowIndex];

string customerId = row.Cells[0].Text;

string companyName = ((TextBox)row.Cells[1].Controls[0]).Text;

string contactName = ((TextBox)row.Cells[2].Controls[0]).Text;

// 执行更新操作

SqlDataSource1.UpdateParameters["CompanyName"].DefaultValue = companyName;

SqlDataSource1.UpdateParameters["ContactName"].DefaultValue = contactName;

SqlDataSource1.UpdateParameters["CustomerID"].DefaultValue = customerId;

SqlDataSource1.Update();

GridView1.EditIndex = -1;

BindData();

}

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)

{

GridViewRow row = GridView1.Rows[e.RowIndex];

string customerId = row.Cells[0].Text;

// 执行删除操作

SqlDataSource1.DeleteParameters["CustomerID"].DefaultValue = customerId;

SqlDataSource1.Delete();

BindData();

}

protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)

{

GridView1.EditIndex = -1;

BindData();

}

}

}

```

在这个例子中,我们使用了GridView控件展示Customers表的数据,并使用SqlDataSource控件实现数据的绑定。在GridView控件中添加了编辑、删除功能,并在事件处理中实现了更新、删除等操作。同时,我们还对GridView 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(90) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部