GridView是ASP.NET Web Forms中最常用的控件之一,它代表了一个可编辑和可定制的网格视图,通常用于呈现和编辑数据。本文将详细介绍GridView控件的用法,包括控件属性和样式的定制、与数据源的绑定、事件的处理等内容。
一、GridView控件的基本用法
在ASP.NET Web Forms项目中,使用GridView控件非常简单。首先,在页面上添加一个GridView控件,如下所示:
```html
```
接下来,我们需要为GridView控件绑定数据源。GridView控件可以绑定各种类型的数据源,包括数据表、数组、集合等。下面是一个例子,使用SqlDataSource绑定数据库中的一张表:
```html
SelectCommand="SELECT * FROM Customers">
```
在这个例子中,我们使用了SqlDataSource控件来连接数据库,并在GridView控件中使用它作为数据源。当GridView控件绑定数据源后,就可以自动显示数据并支持编辑、排序、分页等功能。
二、GridView控件的属性和样式定制
通过修改属性和样式,可以定制GridView控件的外观和行为。下面介绍常用的属性和样式:
1. AutoGenerateColumns
AutoGenerateColumns属性用于指定GridView控件是否自动生成列。如果设置为True,则GridView控件会自动为绑定的数据源生成列;如果设置为False,则需要手动指定列信息。默认值为True。
```html
```
2. AllowPaging
AllowPaging属性用于指定GridView控件是否支持分页。如果设置为True,则GridView控件会根据PageSize属性分页显示数据;如果设置为False,则会将所有数据显示在一起。默认值为False。
```html
```
在这个例子中,我们将PageSize属性设置为10,表示每页显示10条数据。
3. HeaderStyle和RowStyle
HeaderStyle属性用于指定GridView控件表头的样式,RowStyle属性用于指定GridView控件行的样式。
```html
RowStyle-BackColor="#F7F6F3" RowStyle-ForeColor="#333333">
```
在这个例子中,我们设置表头的背景颜色为#336699,前景颜色为白色;行的背景颜色为#F7F6F3,前景颜色为#333333。
4. EditIndex
EditIndex属性用于指定GridView控件中当前编辑的行的索引。通常在RowEditing事件中将该属性设置为当前行的索引,然后在RowUpdating事件中实现更新操作。
```html
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
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
SelectCommand="SELECT * FROM Customers">
```
在这个例子中,我们在GridView控件中内嵌SqlDataSource控件,并在SqlDataSource控件中指定SQL语句。这种方式比较适合简单的查询操作,但通常不推荐在实际开发中使用。
2. 高级用法
在实际开发中,我们通常需要使用较为复杂的查询语句,并且需要支持数据更新、插入、删除等操作。为了实现这些功能,可以通过代码绑定的方式来绑定GridView控件和SqlDataSource控件。下面是一个例子:
```html
OnRowDeleting="GridView1_RowDeleting" OnRowCancelingEdit="GridView1_RowCancelingEdit">
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
OnRowCancelingEdit="GridView1_RowCancelingEdit">
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
}
```
2. RowUpdating事件
在RowUpdating事件中,我们需要实现更新操作。首先需要获取当前行的数据,然后将它更新到数据库中:
```html
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
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
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" %>
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/
发表评论 取消回复