这一章我们将学习怎样显示数据,喜欢偷懒的你可以从拷贝以下代码开始:
<%@ page language="vb" debug="true" %>
<%@ import namespace="system.data" %>
<%@ import namespace="system.data.oledb" %>
<script language="vb" runat="server">
sub page_load(sender as object, e as eventargs)
dim objconn as new oledbconnection("provider=microsoft.jet.oledb.4.0; data source=e:\sff\site\db\test.mdb")
objconn.open()
dim ds as dataset = new dataset()
dim objadapter as new oledbdataadapter("select * from users", objconn)
dim objcmdbld as new oledbcommandbuilder(objadapter)
objadapter.fill(ds, "users")
repeater
repeater是一个根据面板循环显示数据的控件。
itemtemplate:数据主要在这里显示
alternativeitemtemplate:利用它可以应用交替的样式;
headertemplate:头格式;
separatortemplate:分隔数据列;
footertemplate:脚格式
databind()
databind()将数据与页面控件绑定:
repeater1.datasource = ds.tables("users").defaultview
databind()
以上代码将数据绑定到repeater,如果没有绑定,数据不会显示。
其他代码
以下是举例的其他代码:
rpt.datasource = ds.tables("users").defaultview
databind()
end sub
</script>
<html><body><font face="arial" size="2">
<asp:repeater id="rpt" runat="server">
<headertemplate>
<table border="0" cellspacing="1" cellpadding="3">
<tr>
<td bgcolor="#6699ff" width="25%">last name</td>
<td bgcolor="#6699ff" width="25%">first name</td>
</tr>
</headertemplate>
<itemtemplate>
<tr>
<td>
<%# container.dataitem("lname") %>
</td><td>
<%# container.dataitem("fname") %>
</td>
</tr>
</itemtemplate>
<footertemplate>
</table>
</footertemplate>
</asp:repeater>
</font></body></html>
说明:
一、 设置了repeater的datasource;
二、 绑定数据到repeater;
三、 repeater数据控件开始;
四、 headtemplate定义repeater的头信息;
五、 itemtemplate定义具体数据填充;
六、 footertemplate定义repeater脚信息;
datalist
datalist和repeater有点相似,和repeater不同的是,datalist可以编辑数据。可以和repeater一样使用template,但是它具有两点不同:
selecteditemtemplate:显示选择的列;
edititemtemplate:显示要编辑的列;
以下是一个使用datalist的简单举例:
dl.datasource = ds.tables("users").defaultview
databind()
end sub
sub dl_itemcommand(sender as object, e as datalistcommandeventargs)
dl.selectedindex = e.item.itemindex
dl.databind()
end sub
</script>
<html><body><font face="arial" size="2"><form runat="server">
<asp:datalist id="dl" runat="server"
headerstyle-backcolor="#6699ff"
selecteditemstyle-backcolor="#6666ff"
selecteditemstyle-forecolor="#ffffff"
repeatlayout = "table"
repeatdirection = "vertical"
datakeyfield = "id"
onitemcommand="dl_itemcommand">
<headertemplate>
last name, click for full name.
</headertemplate>
<itemtemplate>
<asp:linkbutton id="b1" runat="server" text=<%# container.dataitem("lname") %> commandname = "select" />
<br>
</itemtemplate>
<selecteditemtemplate>
<%# container.dataitem("lname") & ", " & container.dataitem("fname") %>
<br>
</selecteditemtemplate>
</asp:datalist>
</form></font>
</body>
</html>
说明:
一、 绑定数据以后,建立了一个过程;
二、 将datalist放入form中,因为在以下的步骤中要求根据选择列刷新页面;
三、 接着定义了一些数据显示格式;
四、 headertemplate:datalist头信息;
五、 itemtemplate:加入链接,定义事件;
六、 selecteditemtemplate:显示first 和 last name;
datagrid
可能它是功能最强大的控件,不管简单还是复杂它都可以实现。
和itemtemplate不同,datagrid有不同类型的列:
bound columns:datagird默认列显示方式;
button columns:按钮列;
edit command column:可以编辑的列;
hyperlink column :带连接的列;
templated column :自定义列显示;
dg.datasource = ds.tables("users").defaultview
databind()
end sub
</script>
<asp:datagrid id="dg" runat="server" />
以上代码很简单,就是绑定数据。
dg.datasource = ds.tables("users").defaultview
databind()
end sub
</script>
<asp:datagrid id="dg" runat="server"
bordercolor="black"
gridlines="vertical"
cellpadding="3"
cellspacing="1"
width="50%"
font-names="arial"
font-size="10pt"
headerstyle-backcolor="#6699ff"
alternatingitemstyle-backcolor="#6666ff"
autogeneratecolumns="false">
<columns>
<asp:boundcolumn headertext="id" datafield="id" />
<asp:templatecolumn headertext="name">
<itemtemplate>
<asp:label id="name" runat="server" text=<%# container.dataitem("fname") & " " & container.dataitem("lname") %> />
</itemtemplate>
</asp:templatecolumn>
</columns>
</asp:datagrid>
可能有一点复杂,我们看说明:
一、 绑定数据以后,设置了一些dataset显示效果,包括字体、表宽、头信息背景颜色、交替背景颜色、是否自动生成数据表等;
二、 加入一个自定义格式列,该列名为name,由字段fname和lname组成;
现在才刚刚开始
可能现在你还没有感受到dataset的好处,以后的章节我们将学习怎样编辑数据。
五、理解datagrid
数据放入datagrid以后,除了一般的显示以外,我们还需要对这些数据进行编辑、修改。看了前几个章节你可能认为datagrid比较简单,数据处理也比较方便。其实,如果需要真正做一个应用,我们会发现前面的知识还远远不够。以下所用的数据库和前面的章节完全相同,一些设置我们可以参考前面章节。我们先来看代码:
<%@ page language="vb" debug="true" %>
<%@ import namespace="system.data" %>
<%@ import namespace="system.data.oledb" %>
<script language="vb" runat="server">
dim objconn as new oledbconnection("provider=microsoft.jet.oledb.4.0; data source=e:\sff\site\db\test.mdb")
dim ds as dataset = new dataset()
dim objadapter as new oledbdataadapter("select * from users", objconn)
sub page_load(sender as object, e as eventargs)
objconn.open()
objadapter.fill(ds, "users")
dg.datasource = ds
dg.datamember = "users"
if not page.ispostback then
dg.databind()
end if
end sub
sub dg_edit(sender as object, e as datagridcommandeventargs)
dg.edititemindex = -1
dg.databind()
end sub
sub dg_cancel(sender as object, e as datagridcommandeventargs)
dg.edititemindex = -1
dg.databind()
end sub
</script>
以上程序代码很简单直接,我们应该都可以看懂。只是需要注意page_load的对数据绑定的处理,在几乎所有的数据库程序中,我们都使用这种方式处理数据绑定,所以,这个处理方式一定要牢记。以上是数据连接和事件处理部分,现在我们看datagrid部分。
自定义datagrid
以下代码演示了自定义datagrid的实现,在实际应用中,我们基本都是这样使用datagrid,以下代码很有典型性,可以作为一个好的参考。
<form runat="server">
<asp:datagrid id="dg" runat="server"
bordercolor="black"
gridlines="vertical"
font-names="arial"
font-size="10pt"
headerstyle-backcolor="#ffcc00" 表格头信息
itemstyle-backcolor="#ffcc66" 每行背景色
alternatingitemstyle-backcolor="#ffffff" 交替背景色
autogeneratecolumns="false" 自定义每行
oneditcommand="dg_edit" 以下三个事件处理
oncancelcommand="dg_cancel"
onupdatecommand="dg_update">
自定义每行显示
<columns>
<asp:boundcolumn readonly="true" headertext="id" datafield="auto" />
<asp:boundcolumn headertext="first name" datafield="number1" />
<asp:boundcolumn headertext="last name" datafield="number2" />
<asp:editcommandcolumn edittext="edit" canceltext="cancel" updatetext="save" headertext="" />
</columns>
</asp:datagrid>
</form>
以上代码中,自定义了数据编辑列,这些相应的处理在前面已经给出代码。我们现在来看事件处理。
oneditcommand
以下是编辑按钮处理代码:
sub dg_edit(sender as object, e as datagridcommandeventargs)
dg.edititemindex = e.item.itemindex
dg.databind()
end sub
以上代码需要注意的是,e.item.itemindex就是我们需要编辑的那行数据。在对数据作任何变动以后,都需要重新绑定数据,也就是databing()。
oncancelcommand
取消按钮处理和上面的编辑按钮处理差不多,区别的是,在这里,dg.edititemindex被设为-1,也就是将数据恢复到原来状态。
onupdatecommand
先来看数据更新代码:
sub dg_update(sender as object, e as datagridcommandeventargs)
dim fname as textbox = e.item.cells(1).controls(0)
dim lname as textbox = e.item.cells(2).controls(0)
dim sqlstr as string
sqlstr = "update users set " & _
"number1 = " & fname.text & ", " & _
"number2 = " & lname.text & " " & _
"where auto = " & e.item.cells(0).text
dim objcommand = new oledbcommand(sqlstr, objconn)
objcommand.executenonquery()
ds.tables.clear
objadapter.fill(ds, "users")
dg.edititemindex = -1
dg.databind()
end sub
以上代码将建立两个textbox,这两个textbox就是datagrid中的复本。然后用sql语句更新数据,最后重新绑定数据。
总结
以上代码可能初学者比较难懂,而且,上面的数据更新方法也不是很好。但是为了我们更好理解,我们还是可以参考以上代码。
六、datagrid数据排序
数据排序在一些特殊的场合是必要的。下面我们将详细介绍datagrid中的数据排序功能。在对datagrid数据实现排序功能以前,我们需要做以下准备:
1、 将autogeneratecolumns设为打开,这样自定义数据列功能将失去,同时也将失去直接编辑功能。其实这无关紧要的,数据显示和编辑分开不同页面这种模式其实是现在比较认可的方法。
2、 必须将allowsorting设为真,这样,在每一列数据的标题将建立一个链接,点击这个链接将按照这个字段排序。
3、 必须建立排序事件,也就是onsortcommand。
现在看代码:
<asp:datagrid id="dg" runat="server"
bordercolor="black"
gridlines="vertical"
font-names="arial"
font-size="10pt"
headerstyle-backcolor="#ffcc00"
itemstyle-backcolor="#ffcc66"
alternatingitemstyle-backcolor="#ffffff"
autogeneratecolumns="true"
oneditcommand="dg_edit"
oncancelcommand="dg_cancel"
onupdatecommand="dg_update"
onsortcommand="dg_sort"
allowsorting="true"
>
</asp:datagrid>
以下是运行界面:
排序事件处理
排序需要用到dataview,现在我们来看排序处理:
sub dg_sort(sender as object, e as datagridsortcommandeventargs)
dim dtable as datatable = ds.tables("users")
dim dview as new dataview(dtable)
dview.sort = e.sortexpression.tostring & " asc"
dg.datasource = dview
dg.databind()
end sub
从以上代码我们可以发现,数据排序功能的实现是需要依靠dataview的,排序以后,绑定数据。应用data view还可以实现其他很多功能,我们在这里只介绍它的排序应用。
升序和降序
我们可以给用户选择升序和降序来排列数据:
<form runat="server">
<asp:datagrid id="dg" runat="server"
bordercolor="black"
gridlines="vertical"
font-names="arial"
font-size="10pt"
headerstyle-backcolor="#ffcc00"
itemstyle-backcolor="#ffcc66"
alternatingitemstyle-backcolor="#ffffff"
autogeneratecolumns="true"
oneditcommand="dg_edit"
oncancelcommand="dg_cancel"
onupdatecommand="dg_update"
onsortcommand="dg_sort"
allowsorting="true"
>
</asp:datagrid>
<p>
<asp:radiobuttonlist runat="server" id="sortby" repeatdirection="horizontal" textalign="right" >
<asp:listitem selected="true">ascending</asp:listitem>
<asp:listitem>descending</asp:listitem>
</asp:radiobuttonlist>
</form>
以上大部分代码我们都很熟悉,只是在最后加了两个选项来选择升序还是降序。我们来看事件处理:
sub dg_sort(sender as object, e as datagridsortcommandeventargs)
dim sortby = request.form("sortby")
dim dtable as datatable = ds.tables("users")
dim dview as new dataview(dtable)
if sortby = "ascending" then
dview.sort = e.sortexpression.tostring & " asc"
else if sortby = "descending" then
dview.sort = e.sortexpression.tostring & " desc"
end if
dg.datasource = dview
dg.databind()
end sub
事件先查看用户选择,然后根据用户选择来处理排序方式。图示如下:
总结:
以上所有章节介绍了asp.net数据库处理,虽然简单,但是应该还是可以给读者一些帮助的。需要注意的是,数据库处理还有很多其他方面没有介绍,在使用过程中需要我们不断学习。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!


