DataGrid 控件是一个基于模板样式的、多功能的、多列的数据绑定控件。在三个数据绑定控件中,DataGrid是功能最为强大的,其次时DataList控件,然后是轻量级的数据绑定控件Repeater。要自定义 DataGrid 中各列的布局,您可以将列类型设置为“模板”,然后修改列的模板。DataGrid 控件也可以无需模板,只需按照默认的设置即可进行呈现,这使得该控件成了用于报告方案的理想控件。
我们可以把DataGrid理解成是HTML里面的一个Table,Table是由行(TR)和列(TD)组成,而DataGrid的行其实是DataGridItem对象,而列就是DataGridColumn 对象。在DataGrid对象的属性集了我们可以看到Items和Columns 属性,它们分别就是DataGrid的行集和列集,也就是DataGridItem对象集合及DataGridColumn 对象集合。通过查看ASP.NET生成的HTML页的源代码,我们也可以发现,DataGrid的表现形式也就是Table。我们也可以把DataGrid理解成数据库里面的表,也是由行和列组成。就像我们建数据库表一样,我们首先要构造表的列,在创建一个DataGrid对象时,我们也是要先创建DataGrid的列。DataGrid的列有以下几种类型:BoundColumn(绑定列)、ButtonColumn(按钮列)、EditCommandColumn(编辑命令列)、HyperLinkColumn(超链接列)、TemplateColumn(模板列)。在使用hoDataGrid控件时候根据不同的类型,DataGrid控件就可以进行选择、编辑、删除、分页和排序。在本节里,我们将根据DataGrid控件常用的三大功能来详细介绍。
9.2 DataGrid控件的详解
9.2.1 DataGrid控件的分页功能
在以往的ASP编程中,我们要实现页面的分页,就得花费很多的功夫编写代码来实现,但是在ASP.NET里,我们只需要对DataGrid控件的属性进行适当的设置,在指指点点中,就能实现强大的分页功能。
像其他控件一样,在使用DataGrid控件之前,也必须引用声明,由于DataGrid控件的属性和选项属性比较多,下面列出几个常用的属性,格式如下:
<asp:DataGrid
id="DataGrid1"
runat="server"
AllowPaging="True"
AllowSorting="True">
<SelectedItemStyle BackColor="#FFC080"></SelectedItemStyle>
<EditItemStyle BorderColor="#E0E0E0" BackColor="Gray"> </EditItemStyle>
<ItemStyle BorderColor="#C0C0FF" BackColor="#E0E0E0"> </ItemStyle>
<HeaderStyle BorderColor="#C0C0FF" BackColor="#E0E0E0"> </HeaderStyle>
<FooterStyle BorderColor="#E0E0E0" BackColor="Silver"> </FooterStyle>
<PagerStyle NextPageText="&gt;上一页" PrevPageText="&lt;下一页" HorizontalAlign="Center" ForeColor="White"
BackColor="#336666" Mode="NumericPages"></PagerStyle>
</asp:DataGrid>
上面这些属性是DtataGrid控件几个常用的模板设置,其中几个我们比较生疏的是< HeaderStyle >、<FooterStyle>、<ItemStyle>和<AllowPaging>属性。
HeaderStyle: 是用来这是表格页眉的样式 ,包括背景色,字体,表格宽度等等;
FooterStyle:是用来设置表格底脚样式,包括背景色,字体,表格宽度等等;
ItemStyle :是用来设置表格正文的样式,包括背景色,字体,表格宽度等等;
EditItemStyle:用来设置编辑选项的样式;
AllowPaging:表示是否允许分页,如果为False,则DataGrid控件将数据一页显示。
AllowSorting:表示是否允许对字段进行排序。
PagerStyle:用来设置分页样式。可以为“1 2 3”数字连接,也可以为“ 上一页 下一页”样式的连接。
对于DataGrid控件的样式,Visual Studio.NET 2003提供了几种模板样式供用户套用,也可以利用属性生成器自行生成样式。我们可以通过DataGrid控件的属性面板里找到,如图9.4所示。
图9.4 DataGrid控件的属性面板
我们先通过一个实例来简单的了解DataGrid的分页功能。
在DataCon Web项目里新建一个Web 窗体,命名为DataGrid_Sample1.aspx,并为DataGrid_Sample1.aspx添加一个DataGrid1控件,如图9.5所示。
图9.5 为DataGrid_Sample1.aspx添加控件
DataGrid_Sample1.aspx页面的主要HTML代码如下:
<form id="Form1" method="post" runat="server">
<asp:DataGrid
id="DataGrid1"
runat="server"
AllowPaging="True"
PageSize="5">
<ItemStyle Font-Size="X-Small" BorderColor="#C0C0FF">
</ItemStyle>
<HeaderStyle Font-Size="X-Small"
BorderColor="#C0C0FF" BackColor="#99CCCC"></HeaderStyle>
<PagerStyle NextPageText="[下一页]" Font-Size="X-Small"
PrevPageText=" [上一页]" BackColor="#66CCCC"></PagerStyle>
</asp:DataGrid>
</form>
DataGrid1控件的属性在上面的HTML代码中已经设置好了,那么,我们下面关心的就是数据绑定部分了。当然,任何数据绑定是少不了与数据库的连接工作。
DataGrid_Sample1.aspx的逻辑代码页面(DataGrid_Sample1.aspx.vb)中的代码如下:
'----code begin----
'引入命名空间
Imports System
Imports System.Data
Imports System.Web.UI
Public Class DataGrid_Sample1
Inherits System.Web.UI.Page
#Region " Web 窗体设计器生成的代码 "
'此处省略了窗体设计器生成的代码
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
If Not IsPostBack Then
'判断是否是第一次浏览该页面
'调用数据绑定过程
getdata()
End If
End Sub
'读取数据信息
Sub getdata()
Dim connstr As String '声明数据库连接字符
Dim mycon As OleDb.OleDbConnection
'因为使用Aeecss数据库,所以声明OleDConnention对象
Dim mycmd As OleDb.OleDbDataAdapter
'声明DataAdapter对象
Dim mysql As String
'声明Command命令的 SQL字符串
Try
connstr = "provider=microsoft.jet.oledb.4.0;data source=" + Server.MapPath(".") + "\StudentInfor.mdb"
'为连接字符串赋值
mycon = New OleDb.OleDbConnection(connstr)
'实例化Connection对象
mysql = "Select id,name,sex,class,tel ,email from student"
'设置SQL语句,即查询数据库中所有内容
mycmd = New OleDb.OleDbDataAdapter(mysql, mycon)
Dim dt As Data.DataSet = New Data.DataSet
'声明DataSet对象,并实例话
mycmd.Fill(dt)
'填充数据,即在内存中生成DataSet模型数据库
DataGrid1.DataSource = dt.Tables(0)
'为DataGrid1控件指定数据源
DataGrid1.DataBind()
'执行绑定
Catch ex As Exception
Response.Write("程序出错,信息描述如下:<br>" & ex.Message)
Finally
mycon.Close()
End Try
End Sub
'DataGrid1控件的翻页事件
Private Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged
DataGrid1.CurrentPageIndex = e.NewPageIndex
getdata()
End Sub
End Class
'--code end -----
在DataGrid1控件的翻页事件过程中, “DataGrid1.CurrentPageIndex = e.NewPageIndex”语句更改了DataGrid1控件当前页码,然后调用getdata过程来获取数据。在这条语句里CurrentPageIndex表示当前页面索引,NewPageIndex表示请求的新的页码索引。这里我们需要注意的时,DataGrid控件的P