《Programming ASP.NET》学习笔记(GridView控件)

GridView控件

把数据源控件绑定到一GridView控件上来显示所获取的数据
它是ASP.NET中增强的DataGrid控件

不从WebControl继承的GridView控件属性

属性   说明
AllowPaging  是否启用分页。默认为false
AllowSorting  是否启用排序。默认为false
AlternatingRowStyle 交替行的样式属性
AutoGenerateColumns 是否为每一个数据源中的字段生成绑定字段。默认值为true
AutoGenerateDeleteButton 是否每一行都添加一个Delete按钮。默认值为false
AutoGenerateEditButton 是否为每一行都会自动添加上一个Edit按钮。默认值为false
AutoGenerateSelectButton 是否每一行都添加上一个Select按钮。默认值为false
BottomPagerRow  将底部的分页行作为一个GridViewRow对象返回
Caption   以HTML caption元素呈现的文本
CaptionAlign  设定caption元素放置位置
CellPadding  单元格内容和边框之间的像素数
CellSpacing  单元格之间的像素数
Columns   返回DataControlField对象的集合
DataKeyNames  主键字段的数组
DataKeys  每条记录的主键值的集合
DataMember  设定多成员数据源中的数据成员
DataSource  为控件设置数据源
EditIndex 编辑的行,从零开始的行索引。-1(默认值)表示没有行被编辑
EditRowStyle  目前选中的编辑行的样式
EmptyDataRowStyle 空数据行的样式
EmptyDataTemplate 当某行没有数据时,用户定义的显示内容
EmptyDataText  当控件绑定到一个空的数据源时,显示的文本
EnableSortingAndPagingCallbacks 是否排序和分页将使用客户端回调。默认值为false
FooterRow  将页脚行作为一个GridViewRow对象返回
FooterStyle  页脚部分的样式属性
GridLines  设置显示哪些网格线。默认值为None
HeaderRow  将标题行作为GridViewRow返回
HeaderStyle  标题部分的样式属性
HorizontalAlign  设置容器中项的水平对齐,例如单元格。默认值为NotSet
PageCount  显示数据所需要的页面数
PageIndex  当前页的索引,从0开始
PagerSettings  返回一个PagerSetting对象,这样可以设置Pager按钮
PagerStyle  Pager行的样式属性
PagerTemplate  用户定义的要显示的Pager行的内容
PageSize  一个页面上要显示的记录的数量
RowHeaderColumn  列标题的可选设置
Rows   返回由控件中的数据组成的GridViewRow对象的集合
RowStyle  控件中行的默认样式属性
SelectedDataKey  返回DataKey,其中包含了当前选中行的键值
SelectedIndex  当前选中的项的索引,从0开始
SelectedRow  返回当前选中的行
SelectedRowStyle 控件中选中行的默认样式属性
SelectedValue  返回当前选中行的DataKey值
ShowFooter  是否显示页脚,默认值为true
ShowHeader  是否显示标题行,默认值为true
SortDirection  返回当前使用的排序方向
SortExpression  返回排序的列名
TopPagerRow  将顶部的Pager行作为一个GridViewRow对象返回
 
提示:
PagerSettings属性返回一个PagerSetting类的实例
Mode 属性 获取或设置支持分页的控件中的页导航控件的显示模式
模式   说明
NextPrevious  上一页按钮和下一页按钮。
NextPreviousFirstLast 上一页按钮、下一页按钮、第一页按钮和最后一页按钮。
Numeric   可直接访问页面的带编号的链接按钮。
NumericFirstLast 带编号的链接按钮、第一个链接按钮和最后一个链接按钮。

除Numberic外,通过设置下表属性来为非数字按钮指定自定义文字:
属性   说明
FirstPageText  第一页按钮的文字。
PreviousPageText 上一页按钮的文字。
NextPageText  下一页按钮的文字。
LastPageText  最后一页按钮的文字。
 
或者通过设置下表属性为非数字按钮显示图像:
属性   说明
FirstPageImageUrl 为第一页按钮显示的图像的 URL。
PreviousPageImageUrl 为上一页按钮显示的图像的 URL。
NextPageImageUrl 为下一页按钮显示的图像的 URL。
LastPageImageUrl 为最后一页按钮显示的图像的 URL。

创建GridView控件
将一个GridView控件拖动到页面中。单击“GridView”控件的智能标签,选择数据源或者自定义一个

设置数据源后GridView控件会使用数据源返回的每个数据字段所对应的列来刷新自身。

再次打开智能标签,选择“启用分页”可以使用分页模式。

提示:
通过将AutoGenerate列属性设置为false,VS2005将提供一个BoundField控件来显示数据。
例如:可以设置列标题,移除不需要的列,添加带有控件的新列来编辑数据行。


修改字段

实现修改,可以在源视图中手工编写HTML代码,或者单击GridView控件的智能标签,选择“编辑列”,弹出“字段”对话框,包括:
可用字段:数据源中的字段
选定的字段:GridView控件中的字段
BoundField属性:设置GridView控件中字段的属性


格式化控件

除了手工编写,也可以使用控件的自动套用格式来格式化控件

 

添加Insert、Update和Delete语句

包括一个Select语句的SqlDataSource控件:
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
    SelectCommand="SELECT * FROM [Customers]"
    ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>">
</asp:SqlDataSource>

选择qlDataSource控件的配置数据源,选择好数据连接后,点击“下一步”,单击“高级”按钮。选择“生成Insert、Update和Delete语句”并确定,最后点击“下一步”,“完成”。此时已经将GridView控件绑定到了一个提供所有的四种CRUD方法的数据源控件上。

打开GridView控件智能标签,选中“启用编辑”和“启用删除”项。

SqlDataSource控件的声明中,包括4个属性:SelectCommand(之前已经有了)和DeleteCommand、InsertCommand和UpdateCommand

DeleteCommand只有一个参数(@original_CustomerID)
参数的具体设置在DeleteParameters中
例如:
<DeleteParameters>
    <asp:Parameter Type="String" Name="original_CustomerID" />
</DeleteParameters>

UpdateCommand,InsertCommand类似,但需要更多参数,所有这些参数都在SqlDataSource中定义。

 

使用开放式并发

经过以上设置,已经具有了更新(或删除)数据的能力。
为了防止多用户操作带来的问题,.NET使用的方法是:
如果记录已经更改,用一种保证能够产生错误的更改方式,在错误发生时,处理这些(很少发生的)错误,这被称为优化并行。

使用开放式并发的方法是在选择“生成Insert、Update和Delete语句”,之后在下面的“使用开放式并发”选项会开启,点击选择即可

 

显示和更新GridView

打开GridView控件智能标签,选中“启用编辑”和“启用删除”项后,就可以使用“编辑”和“取消”连接来操作数据。

点击GridView控件智能标签的“编辑列”,“选定的字段”中会出现“CommandField”字段,点击可进行编辑。
例如:
使用按钮而不是使用连接来操作数据
单击“外观”中的ButtonType属性,选择Button

 

Take It for a Spin

启动程序,将客户数据加载到GridView中。
当单击“Edit”按钮时,GridView将自动进入编辑模式。
可编辑文本字段变成了文本框,命令按钮由“编辑”和“删除”变成了“更新”和“取消”

当单击“更新”时,GridView和数据库都将被更新

 

使用事件跟踪更新

GridView 控件可公开分页事件和排序事件,以及在创建当前行或将当前行绑定至数据时发生的事件。

由 GridView 控件公开的事件:

RowCommand
在GridView控件中单击某个按钮时发生。
此事件通常用于在该控件中单击某个按钮时执行某项任务。

PageIndexChanging
在单击页导航按钮时,执行分页操作之前发生。
此事件通常用于取消分页操作。

PageIndexChanged
在单击页导航按钮时,执行分页操作之后发生。
此事件通常用于在用户定位到该控件中不同的页之后需要执行某项任务时。

SelectedIndexChanging
在单击某一行的Select按钮时,执行选择操作之前发生。
此事件通常用于取消选择操作。

SelectedIndexChanged
在单击某一行的Select按钮时发生,执行选择操作之后发生。
此事件通常用于在选择了该控件中的某行后执行某项任务。

Sorting
在单击某个用于对列进行排序的超链接时,执行排序操作之前发生。
此事件通常用于取消排序操作或执行自定义的排序例程。

Sorted
在单击某个用于对列进行排序的超链接时,执行排序操作之后发生。
此事件通常用于在用户单击对列进行排序的超链接之后执行某项任务。

RowDataBound
在GridView控件中的某个行被绑定到一个数据记录时发生。
此事件通常用于在某个行被绑定到数据时修改该行的内容。

RowCreated
在GridView控件中创建新行时发生。
此事件通常用于在创建某个行时修改该行的布局或外观。

RowDeleting
在单击某一行的Delete按钮时,从数据源删除记录之前发生。
此事件通常用于取消删除操作。

RowDeleted
在单击某一行的Delete按钮时,数据源删除记录之后发生。
此事件通常用于检查删除操作的结果。

RowEditing
在单击某一行的Edit按钮时,进入编辑模式之前发生。
此事件通常用于取消编辑操作。

RowCancelingEdit
在单击某一行的Cancel按钮时,退出编辑模式之前发生。
此事件通常用于停止取消操作。

RowUpdating
在单击某一行的Update按钮时,更新记录之前发生。
此事件通常用于取消更新操作。

RowUpdated
在单击某一行的Update按钮时,更新记录之后发生。
此事件通常用来检查更新操作的结果。

DataBound
在GridView控件完成到数据源的绑定后发生。

例如:
RowUpdated 事件
在GridView控件的属性栏中双击RowUpdated事件右面的方法名称列(目前为空)。
VS2005将创建一个事件处理程序,名称为GridView1_RowUpdated(),同时,还将在代码隐藏页文件中设置该方法的框架。

处理RowUpdated事件:
protected void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
    if (e.ExceptionHandled)
    {
        string exceptionMessage = e.Exception.Message;
    }
    else
    {
        int numRowsChanged = e.AffectedRows;
        foreach (DictionaryEntry myDE in e.NewValues)
        {
            string key = myDE.Key.ToString();
            string val = myDE.Value.ToString();
            Label1.Text += key + ":" + val + "<br/>";
        }        // foreach语句结束
    }           // else语句结束
}              // GridView1_RowUpdated方法结束

该方法第二个参数是GridViewUpdatedEventArgs类型

ExceptionHandled 属性 更新数据时是否发生异常
如果更新数据时发生异常,将返回true,GridViewUpdatedEventArgs对象将包括异常对象。

AffectedRows 属性 受到更新影响的行数
有序集合Keys、OldValues和NewValues告知发生了哪些改变

提示:为了使用DictionaryEntry,需要在文件顶部添加“using Systems.collection”

 

基于事件修改GridView

RowDataBound事件在GridView控件中的某个行被绑定到一个数据记录时发生。

处理RowDataBound事件:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        TableCell cell = e.Row.Cells[2];
        if (cell.Text.ToUpper() == "A")
        {
            cell.ForeColor = System.Drawing.Color.Red;
        }
    }
}

第一个if语句用于测试作为参数传入的行类型是否是DataRow类型。
如果是DataRow,从行中获得需要验证的单元格。

 

将参数传递给Select查询


添加Select按钮
在GridView控件的智能标签中选择“启用选定内容”


创建第二个GridView
先创建一个新数据源控件SqlDataSource2,再创建第二个GridView,并选择这个数据源


配置数据源

添加 WHERE 子句
在配置数据源对话框单击“Where”按钮,添加 WHERE 子句
首先选中需要匹配的列,下一步选择运算符,第三个选择数据源。
如果您将提供一个源,那么可以选None,或者可以从表单、用户的profile、查询字符串或者会话状态获得源。
现在选择Control,为了从第一个GridView中获得数据源。
参数属性的控件id选择第一个GridView的“GridView1”,默认值可选。
单击“添加”按钮,然后确定

添加 Order By 子句
单击“Order By”按钮,选择排序方式

返回源窗口,可以看到SqlDataSource控件的SelectCommand属性:
SelectCommand="SELECT * FROM [cloud] WHERE ([id] = @id) ORDER BY [id]"

Select语句现在有一个包含参数(@id)的WHERE子句。
并且有一个ControlParameter类型参数,说明了如何从控件中获得它的值:
<SelectParameters>
    <asp:ControlParameter ControlID="GridView1" DefaultValue="1" Name="id" PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>

ControlID 属性 用于指定从哪个控件获得值
PropertyName 属性 用于指定检查GridView中的哪个属性
Type 属性 设置了获得的值的类型

现在,当在上面的GridView中单击每select按钮时,对应数据将显示在新的GridView中。

GridView中的列字段
字段  说明
BoundField 数据源中的字段值(GridView默认列类型)
ButtonField 命令按钮(Add、Remove、Select)
CheckBoxField 在GridView中为每一项显示一个多选框(通常用于布尔值)
HyperLinkField 和BoundField类似,但是显示的是一个链接,指向所指定的目标URL
ImageField 在GridView中为每一项显示一幅图片
TemplateField 允许用户根据指定的模板定义每一项的显示内容 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值