考察DataGrid Web 控件 Part 1


 经典ASP(classic ASP)的最常见的任务之一便是从数据库获取信息并展示在一个HTML表格里面.我们需要很多HTML和代码混合在一起的行才能达到该目的.通常情况下看起来应该像如下这个样子:

Create Database Connection
Populate a recordset based on some SQL query
Output the HTML table header (<table ...>)
Loop through the recordset
 Emit the HTML for a table row
 ...
Emit the HTML table footer (</table>)

  ASP.NET的优势在于其包含了很多的Web控件.这些编辑HTML的控件允许开发者将代码和内容分离,并在代码里将HTML实体当作一个对象.也即,如果我们想用ASP.NET展示某些HTML内容,将像下面这样做:

<script language="vb" runat="server">
 sub Page_Load(sender as Object, e as EventArgs)
  lblMessage.Text = "Hello, World!"
 end sub
</script>
  
<asp:label runat="server" id="lblMessage" />

  这里的label Web控件lblMessage看起来和HTML标签很类似,只是有一个runat="server"属性.在Page_Load事件处理器(每次登录页面时都会发生)里,lblMessage的Text属性被设置为"Hello, World!".我们在这里使用Web控件就达到了将代码从内容(content)分离的目的;如果是在经典ASP,为达到相同的效果,我们必须将<%="Hello, World!"%>放置在HTML内容的适当地方.

  DataGrid控件比label控件更有用也更强大.DataGrid对绑定的HTML table相应地产生必需的HTML,就像随后我们将看到的那样,将数据绑定到DataGrid是很容易的;另外,通过小小的改动,我们就可以对外观进行定制,呈现出很漂亮的HTML表格( HTML tables).
DataGrid控件基础

  要在ASP.NET Web页面上添加一个DataGrid控件,你仅仅需要添加如下的代码:

<asp:datagrid runat="server" id="ID_of_DataGrid" />

  其中id值便是DataGrid控件的名字,当你在服务器端代码里引用该控件时就会用到它.为了使DataGrid展示我们所需要的有用东西,我们将把它绑定到某个信息集(collection of information),该信息集可以是任何支持IEnumerable界面的的对象,比如Arrays, collection classes(ArrayList, 哈希表等),DataSets, DataReaders以及其它的对象.

  在本文,我们把DataGrid绑定到DataReader.它和ADO/ASP里的Recordset差不多.要了解使用ADO.NET将数据库查询结果写入DataReader的更多细节请参阅文章《read: Efficiently Iterating Through Results from a Database Query using ADO.NET》(译注:网址为http://aspnet.4guysfromrolla.com/articles/032702-1.aspx)

  那怎么样将数据绑定到DataGrid呢?非常简单!首先我们要创建一个包含数据库数据的DataReader控件.本例,我们使用ASPFAQs.com的数据库,返回10个最常见的FAQs(即常见问题解答).为将DataReader绑定到DataGrid,我只需要写2行代码.第一行代码将DataGrid控件的DataSource属性设置为DataReader;第二行代码调用DataGrid控件的DataBind方法.

  要做的就是这些,就像下面的代码展示的那样:

<% @Import Namespace="System.Data" %>
<% @Import Namespace="System.Data.SqlClient" %>
<script language="vb" runat="server">
 Sub Page_Load(sender as Object, e as EventArgs)
  BindData()
 End Sub
 Sub BindData()
  '1. Create a connection
  Dim myConnection as New SqlConnection(
     ConfigurationSettings.AppSettings("connectionString"))
  
  '2. Create the command object, passing in the SQL string
  Const strSQL as String = "sp_Popularity"
  Dim myCommand as New SqlCommand(strSQL, myConnection)
  
  'Set the datagrid's datasource to the datareader and databind
  myConnection.Open()
  dgPopularFAQs.DataSource = myCommand.ExecuteReader(
               CommandBehavior.CloseConnection)
  dgPopularFAQs.DataBind()
 End Sub
</script>
  
<asp:datagrid id="dgPopularFAQs" runat="server" />


  (注:查看示例的页面为http://aspnet.4guysfromrolla.com/articles/040502-1.aspx)

  我们注意到,实现数据绑定的代码一点也不多.在代码里我们创建了一个连接,指定一个SQL命令(在此为一个名为sp_Popularity的存储过程),打开数据库连接,将DataGrid的DataSource属性设置为返回的DataReader,最后调用DataGrid的DataBind方法.该方法完全实现了代码和内容的分离.与经典ASP相比,没有出现HTML table和DataReader的输出结果混杂在一起的情况(意既经典ASP没有实现代码和内容的分离)

  花些时间来查看那个示例页面吧,DataGrid展示了我们想要的结果,虽然外观不太好看,但"显示数据"这个目的是达到了的。要美化界面也是很容易的,下一节我们就来探讨这个问题。

  结语:

  本节,我们考察了DataGrids的基础知识——怎样在页面添加控件并展示绑定的数据,不幸的是界面比较糟糕.然而,正如我们即将看到的那样,美化其界面简直是小菜一碟,另外我们将考察一些用户界面高级选项(比如分页,排序),当然这些是下一节的内容。

  祝编程快乐!


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3