用GridView的RowDataBound事件自定义格式化
前面我们讨论了在FormView和DetailsView中实现数据绑定的步骤,现在让我们回顾下
- DataBinding事件触发
- 数据绑定到数据绑定控件
- DataBound事件触发
对于FormView和DetailsView有效因为只需要显示一个数据,而在GridView中,则要显示所有数据,相对于前面三个步骤,步骤二有些不同
在步骤二中,GridView 列出所有的数据,对于某一个记录将创建一个GridViewRow 实例并绑定,对于每个添加到GridView 中的 GridViewRow两个事件将会触发:
· RowCreated – 当GridViewRow被创建时触发
· RowDataBound – 当前记录绑定到GridViewRow时触发.
对于GridView,请使用下面的步骤
- DataBinding事件触发
- 数据绑定到数据绑定控件
对于每一行数据..
a. 创建GridViewRow
b. 触发 RowCreated 事件
c. 绑定数据到GridViewRow
d. 触发RowDataBound事件
e. 添加GridViewRow到Rows 集合
- DataBound事件触发
· DataRow – GridView的DataSource中的一条记录
· EmptyDataRow – GridView的DataSource显示出来的某一行为空
· Footer – 底部行; 显示由GridView的ShowFooter属性决定
· Header – 头部行; 显示由GridView的ShowHeader属性决定
· Pager – GridView的分页,这一行显示分页的标记
· Separator – 对于GridView不可用,但是对于DataList和Reapter的RowType属性却很有用,我们将在将来的文章中讨论他们
当上面四种(DataRow, Pager Rows Footer, Header)都不合适对应值时,将返回一个空的数据项, 所以我们需要在代码中检查GridViewRow的RowType属性来确定:
{
// Make sure we are working with a DataRow
if (e.Row.RowType == DataControlRowType.DataRow)
{
// Get the ProductsRow object from the DataItem property...
Northwind.ProductsRow product = (Northwind.ProductsRow)((System.Data.DataRowView)e.Row.DataItem).Row;
if (!product.IsUnitPriceNull() && product.UnitPrice < 10m)
{
// TODO: Highlight row yellow...
}
}
}
我们需要访问GridViewID.Rows[index]来访问index对应的那一行,GridViewID.Rows[index].Cells[index]来访问某一单元格.然而当RowDataBound事件触发时,GridViewRow却没有添加到Rows集合中, 因此我们不能在RowDataBound事件处理中通过当前GridViewRow实例 取而代之,我们可以通过e.Row来访问。为了高亮某一行我们用下面的代码