GridView

GridView 是一个用于显示数据的极为灵活的网格控件。它有很多的易用性,包括选择、分页、排序和编辑,可以很方便的通过模版扩展。

当把 GridView.AutoGenerateColumns 属性设置为 true 时,GridView 使用反射来检查数据对象并找到所有的字段或属性,以发现的次序为它们逐个创建列。

自动生成的列对于快速创建测试页面很有效,但通常缺少必需的灵活性。如果你希望隐藏列,改变它的次序,或者希望配置显示的某些方面,如格式化列的标题文字等等,在所有这些情形下,你需要把 AutoGenerateColumns 设为 false 并在 GridView 控件标签的 <Columns>中定义列。

列的类型:

BoundField 显示数据源字段的文本
ButtonField 为列表中每个项目显示一个按钮
CheckBoxField 为列表中每个项目显示一个复选框(适用于 “真”或“假”这种数据类型)
CommandField 提供选择或编辑按钮
HyperLinkField 用超链接的形式显示内容
ImageField 显示二进制字段的图像数据
TemplateField 允许你使用自定义模板指定多个字段、自定义控件以及任意的 HTML 。 
它给你最大程度的控制度,同时需要你做最多的事工作。

刚创建 GridView 时,AutoGenerateColumns 属性为默认的 true,刷新架构后,AutoGenerateColumns 为 false,同时 VS 为在数据源中发现的每一个字段添加了一个 <asp:BoundField> 标签。修改列对象的属性可以很方便的调整列的次序、标题或者其他细节。移除标签也可以隐藏不想显示的列(但不想显示的列最好不要读取它们)。

而显式定义的列比自动生成的列运行快(因为需要再使用反射)。

下面是一个显式定义列的完整声明:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataSourceID="sourceEmployees">
    <Columns>
        <asp:BoundField DataField="EmployeeID" HeaderText="ID" />
        <asp:BoundField DataField="FirstName" HeaderText="First Name" />
        <asp:BoundField DataField="LastName" HeaderText="Last Name" />
        <asp:BoundField DataField="Title" HeaderText="Title" />
        <asp:BoundField DataField="City" HeaderText="City" />
    </Columns>
</asp:GridView>
<asp:SqlDataSource ID="sourceEmployees" runat="server" 
    ConnectionString="<%$ ConnectionStrings:Northwind %>"
    ProviderName="System.Data.SqlClient" 
    SelectCommand="select EmployeeID,FirstName,LastName,BirthDate,Title,City from Employees">
</asp:SqlDataSource>

显式声明一个绑定字段的同时,还可以设置其他属性,见下表:

DataField 要显示的数据项的字段(对行而言)或属性(对对象而言)
DataFormatString 用于格式化字段。在显式正确格式的数字和日期时特别有用。
ApplyFormatInEditMode 即使在编辑模式下文本框中的值也会用格式化字符串来格式化(默认false)
HeaderText、FooterText 
HeaderImageUrl
当网格有标题行(GridView.ShowHeader 为 true)或注脚行(GridView.ShowFooter 为 true)时设置标题行和注脚行的文字。标题行也可以设置成图片。
ReadOnly 为 true 时,列的内容在编辑模式不可改变,不提供任何编辑控件。
InsertVisible 为 false 时,列的值在新增模式时不可设置。
Visible 为 false 时,列不会显示(也不会为它生成 HTML)
SortExpression 指定一个附加在查询之后的表达式,用于执行基于该列的排序
HtmlEncode 为 true 时(默认值),所有文本都用 HTML 编码以防止特殊字符破坏页面。
NullDisplayText 值为空值时显示的文本,默认是一个空字符串。可以硬编码为其他字符串(如“未指定”)
ConvertEmptyStringToNull 为 true 时,编辑提交前把所有空字符串转换成空值
ControlStyle、HeaderStyle 
FooterStyle、ItemStyle
覆盖行的样式,配置本列的外观。

格式化 GridView

格式化包含几个相关的任务:

  • 保证日期、货币、数值以合适的方式呈现。
  • 希望网格的各个方面都能够应用颜色、字体、边框和对齐的完美组合。
  • 可以截止事件,检查行数据,并通过编程来格式化属性。

提示:

在网页中创建一个包含滚动条的 GridView 很容易,将 GridView 放入一个 Panel 中,给 Panel 设置适当尺寸,并把 Panel.Scrollbars 设置为 Auto、Vertical、Both 之一即可

1. 格式化字段

格式化字符串通常由一个占位符和格式指示器组成,并被包含在一组花括号中。

格式化字符串并不仅限于 GridView 使用,可以和其他控件使用,可用于模版中的数据绑定表达式,还可以作为很多方法的参数。

数字格式化字符串:

货币 {0:C} $1,234.50       括号为负数:($1,234.50)
科学计数法(指数) {0:E} 1.234500E+003
百分百 {0:P} 45.6%
固定浮点数 {0:F?} 由 ? 决定小数的位数

时间和日期格式化字符串:

短日期 {0:d} M/d/yyyy
长日期及短时间 {0:f} dddd,MMMM,dd,yyyy HH:mm aa
长日期 {0:D} dddd,MMMM,dd,yyyy
长日期及长时间 {0:F} dddd,MMMM,dd,yyyy HH:mm:ss aa
ISO 排序标准 {0:s} yyyy-MM-ddTHH:mm:ss
月和日 {0:M} MMMM dd
一般 {0:G} M/d/yyyy HH:mm:ss aa

2. 样式

GridView 公开了基于样式的富格式化模型。样式不是简单的属性,而是每个样式公开了一个 Style 对象,该对象包含一组属性,包括颜色选择(ForeColor、BackColor)、增加边框(BorderColor、BorderStyle、BorderWidth),调整行的尺寸(Height、Width),对齐行(HorizontalAlign、VerticalAlign)以及配置文字外观(Font、Wrap)。

这些样式属性几乎允许你细化项目外观的所有方面,见下表:

HeaderStyle 标题列的外观
RowStyle 每个数据行的外观
AlternatingRowStyle 交替行的数据行外观
SelectedRowStyle 选中行的外观
EditRowStyle 编辑行的外观
EmptyDataRowStyle 配置一种特殊情况下只有单个空行时的外观。通常出现在绑定数据对象不包含任何行的时候
FooterStyle 脚注行的外观
PagerStyle 启用分页时,配置包含页链接的行的外观

以下是一个完全格式化的 GridView 控件:

<asp:GridView ID="GridView1" runat="server" DataSourceID="sourceEmployees" AutoGenerateColumns="False"
    Font-Names="Verdana" Font-Size="X-Small" ForeColor="#333333" CellPadding="4"
    GridLines="None">
    <HeaderStyle BackColor="#990000" Font-Bold="true" ForeColor="White" />
    <RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
    <AlternatingRowStyle BackColor="White" />
 
    <Columns>
        <asp:BoundField DataField="EmployeeID" HeaderText="ID">
            <ItemStyle Font-Bold="true" BorderWidth="1" />
        </asp:BoundField>
        <asp:BoundField DataField="FirstName" HeaderText="First Name" />
        <asp:BoundField DataField="LastName" HeaderText="Last Name" />
        <asp:BoundField DataField="City" HeaderText="City">
            <ItemStyle BackColor="LightSteelBlue" />
        </asp:BoundField>
        <asp:BoundField DataField="BirthDate" HeaderText="Birth Date" DataFormatString="{0:yyyy/MM/dd}" />
    </Columns>
</asp:GridView>
 
<asp:SqlDataSource ID="sourceEmployees" runat="server" ConnectionString="<%$ ConnectionStrings:Northwind %>"
    ProviderName="System.Data.SqlClient" SelectCommand="select EmployeeID,FirstName,LastName,BirthDate,City from Employees">
</asp:SqlDataSource>

说明:

  1. 使用 GridView 属性设置字体并调整单元格间距和单元格的边线。
  2. 利用样式加粗标题并配置行与交替行的背景。
  3. 特定列的样式设置不同的背景色来突出位置信息。
  4. 加粗 ID 列。

3. 格式化特定值

到目前为止,格式化还不够精细,最细的时候也只是作用于单个列的值。如果希望格式化某个特定的行甚至某个单元格,该怎么办呢?

解决办法是响应 GridView.RowDataBound 事件。该事件在网格的一部分(标题、脚注、分页、普通数据行或交替数据行、选定项目)被创建时发生。

  1. 访问当前行时,将其视为 GridViewRow 控件。
  2. GridViewRow.DataItem 属性提供指定行的数据对象。
  3. GridViewRow.Cells 集合可以读取行的内容。
  4. 通过 GridViewRow 可以改变颜色和对齐方式,增加或删除子控件等。

示例:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        string city = DataBinder.Eval(e.Row.DataItem, "City").ToString();
        if (city == "London")
        {
            e.Row.BackColor = System.Drawing.Color.LightPink;
            e.Row.ForeColor = System.Drawing.Color.Maroon;
        }
    }
}

提示:

这里使用 DataBinder.Eval()通过反射从数据项中读取信息。还有一种选择,可以把 e.Row.DataItem 转换为正确的类型(如 ObjectDataSource 使用的 EmployeeDetails)、DataRowView(SqlDataSource 使用 DataSet 模式时)或者 DbDataRecord(SqlDataSource 使用 DataReader 模式时)。不过,DataBinder.Eval()适用于所有这些场景(以速度略慢为代价)。

显然,利用 GridView.RowDataBound 事件还可以做出更多更富有想象力的事。

富数据控件 GridView(定义列、格式化、样式)相关推荐

  1. Windows8 Metro应用开发之C#(3)- 数据控件ListView、GridView、FlipView

    Windows8 Metro应用开发之C#(3)- 数据控件ListView.GridView.FlipView 介绍: 本节主要对Windows 8 中对于Metro应用开发提供的数据控件ListV ...

  2. ASP.NET的五大数据控件分析

    ASP.NET 数据控件:GridView,DataList,Repeater ,DetailsView,FormView. ASP.NET 数据控件综述: 1.前3个用于呈现多条记录,后面2个用于呈 ...

  3. Gridview数据控件的七种字段类型

    9.8  数据控件的七种字段类型(Fields Type)的应用 GridView共支持七种字段类型,字段原本应该叫"Column"比较恰当,但ASP.NET 2.0却采用另一个名 ...

  4. 一起谈.NET技术,浅析五大ASP.NET数据控件

    ASP.NET数据控件综述: 1. 前3个(GridView 控件,DetailsView 控件,FormView 控件)用于呈现多条记录,后面2个(Repeater 控件,DataList 控件)用 ...

  5. 数据绑定控件GridView展示商品列表

    数据绑定控件GridView展示商品列表(1) 控件名称:GridView. 说明:通过表格方式实现数据的展示,并集成编辑.分页.排序等功能,比如显示商品列表. 控件名称:DropDownList. ...

  6. 在 Web 数据控件中显示二进制数据54

    简介 前面的教程中 , 我们介绍了将二进制数据与应用程序的基础数据模型相关联的两种方法 , 并使用FileUpload 控件从浏览器向 Web 服务器的文件系统上载.我们还将了解怎样将上载的二进制数据 ...

  7. 快速构建Windows 8风格应用6-GridView数据控件

    原文:快速构建Windows 8风格应用6-GridView数据控件 本篇博文主要介绍什么是GridView数据控件.如何构建常用的GridView数据呈现样式. 什么是GridView数据控件? G ...

  8. java使用gridview,网格控件GridView在Android中的使用

    我们在上面之前发表过一篇"使用Gallery实现缩略图浏览器",今天介绍另一种类似的控件,但是该控件是以网格的方式显示的,也就是说,当我们使用它来显示一组图片,结果图片将会以类似九 ...

  9. ASP.Net 数据绑定之-----选择合适的数据控件

    DataGrid,DataList,Repeater是我们最常使用的表格化数据显示控件.在它们之间你是不是曾经不知道该怎么选择呢?怎样才能选择到最适合的控件呢?看了以下的内容你大概就会明白了 .    ...

最新文章

  1. 近期活动盘点:​年末必学课程《社会网络分析》
  2. 线程同步synchronized
  3. hadoop快速入门之DKH安装准备
  4. 递归 || 递归的相关实例练习
  5. 深圳市灯谜学会的近三百条“深圳原创灯谜”引的市民激智抢麦
  6. 使用DIV之后 table何去何从
  7. 学校老师绝对不会教的方法,让你的孩子拥有一个开挂般的人生!
  8. python 线性回归函数_Python实现的简单线性回归算法实例分析
  9. 简述计算机图形的图形应用主要有哪些,5计算机图形学考试简答题复习.doc
  10. Unity3D与JSP TomCatserver传递数据和文件( 二 ) Unity3D向java传输表单
  11. [当当网,你意欲何为]之二:无奈,配送之痛
  12. 怎样成为优秀软件模型设计者
  13. 【模拟信号】基于matlab抑制载波双边带调幅信号产生+解调【含Matlab源码 985期】
  14. 【POJ 3977】【折半枚举】【超大背包】Subset【暑期 No.7】
  15. 和利时HOLLYSYS MACS-K系列DCS介绍
  16. dojo和ArcGIS
  17. jvm:jvm GC日志解析:G1日志解析
  18. 根据出生日期获取年龄
  19. 上线MES系统后,这6大问题必须注意
  20. Deep3DBox论文精读

热门文章

  1. 【Flutter】HTTP 网络操作 ( 引入 http 插件 | 测试网站 | Get 请求 | Post 请求 | 将响应结果转为 Dart 对象 | Future 异步调用 )
  2. 【算法】双指针算法 ( 有效回文串 II )
  3. 【组合数学】非降路径问题 ( 非降路径问题概要说明 | 非降路径问题基本模型 | 非降路径问题拓展模型 1 非原点起点 | 非降路径问题拓展模型 2 有途经点 )
  4. 【Android 应用开发】Android之Bluetooth编程
  5. Swagger 入门使用
  6. 关闭子页面刷新父页面,不需要弹出确认窗口
  7. JavaWeb+SVN+Maven+Tomcat +jenkins实现自动化部署
  8. (数论)51NOD 1135 原根
  9. ubuntu 16.04安装visual studio code 提示libnss3版本低:NSS = 3.26 is required
  10. mysql 解除安全模式