以前在ASP中,我们显示大批量数据经常使用循环读取记录集的方式,在表格中插入代码来显示,循环的是<tr>,如果是分页还需要自己制作,如果排序更加复杂,在ASP.NET中就好了,一切工作都可以让DATAGRID来做。
首先看一下DATAGRID的样式方面的属性: BackImageUrl="" (背景图片); CellSpacing="" (单元格间距); CellPadding="" (单元格填充); cssClass="" (使用的CSS样式); DATAGRID可以自动用表中的字段名放在显示的记录的头部来表示各个单元格所代表的意义,用ShowHeader="true/false"来控制是不是显示,在大多数情况下我们是不需要这个功能的,因为我们数据库中的字段名大多是英文的,而我们想在页面输出的大多是中文名字。下面看一下显示数据库内所有记录,就几行代码:
1. <script runat="server" language="c#">
2. void Page_Load()
3. {
4. string strConnection="Provider=Microsoft.Jet.OleDb.4.0;Data Source=";
5. strConnection+=Server.MapPath("guestbook.mdb");
6. OleDbConnection objConnection=new OleDbConnection(strConnection);
7. OleDbCommand objCommand1 = new OleDbCommand("select * from guestbook",objConnection);
8. objConnection.Open();
9. dgrdMain.DataSource=objCommand1.ExecuteReader();//dgrdMain就是下面的DATAGRID的ID
10. dgrdMain.DataBind();
11. objConnection.Close();
12. }
13. </script>
14. <html>
15. <body>
16. <asp:DataGrid
17. id="dgrdMain"
18. cellpadding="1"
19. showheader="true"
20. borderwidth="0"
21. runat="server"
22. />
23. </body>
24. </html>
假设数据库是三个字段:id,aa,bb 显示的样子就如下:id aa bb 1 werwe rewrwe 2 werwe rewrwe 。
id aa bb
1 werwe rewrwe
2 werwe rewrwe
我们一定觉得这种显示不满意,我们有两种显示的方式(需要包括在<columns></columns>中间): 一、默认的列,我们可以选择不输出所有的字段还可以安排顺序: <asp:BoundColumn DataField="想要显示的字段名"> 比如说我们想按照bb,aa来输出这个表,我们这么写
1. <asp:DataGrid
2. id="dgrdMain"
3. cellpadding="1"
4. showheader="true"
5. autogeneratecolumns="false"
6. borderwidth="0"
7. runat="server">
8. <columns>
9. <asp:boundcolumn datafield="bb"/>
10. <asp:boundcolumn datafield="aa"/>
11. </columns>
12. </asp:datagrid>
注意使用了autogeneratecolumns="false"以后DATAGRID就不会自动输出所有字段了。 二、模板列,我们可以定制每一个单元格的样式: <asp:emplateColumn> <itemTemplate> 中间是一个表格,可设置成自己想要的样式 </itemTemplate> </asp:ataGrid> ,或许你们要说怎么在表格中输出代码那,可以使用<%# DataBinder.Eval(Container.DataItem,"字段名").ToString()%> 。
下面看一个例子,我们所要做的就是把aa,bb两个字段放在一个单元格内显示,就好像下面一样: 1 werwe rewrwe 2 werwe rewrwe 我们这样写代码:
1. <asp:DataGrid
2. id="dgrdMain"
3. cellpadding="1"
4. showheader="false"
5. autogeneratecolumns="false"
6. borderwidth="0"
7. runat="server">
8. <columns>
9. <asp:boundcolumn datafield="ii"/> 首先使用默认的显示方式显示ID
10. <asp:TemplateColumn> 再使用模板来显示后面一列(由AA,BB并列组成)
11. <itemTemplate>
12. <table border="0" cellspacing="0" cellpadding="0" width="100%">
13. <tr>
14. <td><%# Container.DataItem("aa")%></td>
15. </tr>
16. <tr>
17. <td><%# Container.DataItem("bb")%></td>
18. </tr>
19. </table>
20. </itemTemplate>
21. </asp:DataGrid>
22. </columns>
23. </asp:datagrid>
DATAGrid的分页显示:
虽然说DATAGRID的分页显示效率不怎么高,但是不管怎么说,它是最方便的分页显示,对于做一个留言簿还是相当简单实用的。对于启用分页功能还有一个重要要求,只能在DATADRID控件的数据源实现了ICOLLECTION接口的情况下才能启用分页功能,而DATAREADER没有这个接口,所以必须使用DATATABLE来代替。
1. <script runat="server" language="c#">
2. void Page_Load()
3. {
4. string strConnection="Provider=Microsoft.Jet.OleDb.4.0;Data Source=";
5. strConnection+=Server.MapPath("guestbook.mdb");
6. OleDbConnection objConnection=new OleDbConnection(strConnection);
7. OleDbDataAdapter objDataAdapter=new OleDbDataAdapter("select * from guestbook",objConnection);
8. DataSet objDataSet=new DataSet();
9. objDataAdapter.Fill(objDataSet);
10. dgrdMain.DataSource=objDataSet;
11. dgrdMain.DataBind();
12. }
13. void dgrdMain_PageIndexChanged(Object sender, DataGridPageChangedEventArgs e)
14. {
15. dgrdMain.CurrentPageIndex = e.NewPageIndex;
16. DataBind(); //数据绑定方法
17. }
18. </script>
19. <html>
20. <body>
21. <asp:DataGrid
22. id="dgrdMain"
23. cellpadding="1"
24. showheader="true"
25. borderwidth="0"
26. allowpaging="true" 启用分页功能
27. pagesize="3" 每一页显示三条记录
28. onpageindexchanged="dgrdMain_pageindexchanged " 调用第×页的函数为dgrdMain_PageIndexChanged()
29. runat="server"
30. />
31. </body>
32. </html>