动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
  
   .Net → 阅读文章

 DefaultView 属性

作者来源: 
阅读 2137 人次 , 2006-3-29 4:28:00 


datatable 的原始输出格式可以透过defaultview 属性来取得, defaultview 属性本身就是dataview 对象;我们可以设定defaultview 的属性来指定datatable 的显示格式。如果预设的一个defaultview 这个dataview 对象无法满足你的需求,我们还可以产生多个dataview 对象来制定多个数据显示外观。下表列出了dataview 对象的常用的属性及方法:


排序数据
要排序数据,可以使用dataview 对象的sort 属性。sort 属性是以字段做为排序的依据,其设定语法如下所示:

dataview.sort="字段一asc|desc [,...字段n asc|desc]"

下列范例指定了members 这个datatable 的defaultview 的sort 属性以userid 做升幂排序:

<%@import namespace=system.data.ado%>
<%@import namespace=system.data%>
<script language="vb" runat="server">
sub page_load(sender as object, e as eventargs)
dim strconstr as string = "provider=microsoft.jet.oledb.4.0;" & _
"data source=c:\inetpub\wwwroot\cr\ch05\myweb.mdb"
dim strcomstr as string = "select * from members"
dim dsca as adodatasetcommand = new adodatasetcommand(strcomstr,
strconstr)
dim dsdataset as dataset = new dataset()
dsca.filldataset(dsdataset, "members")
dim dttable as datatable = dsdataset.tables("members") '为了方
便使用而宣告的别名
dim shtr as short
response.write("datatable 中的原始资料:<br>")
for shtr=0 to dttable.rows.count-1 ' 直接抓出datatable 中的数

response.write("顺序" & (shtr+1).tostring & " " & _
dttable.rows(shtr)("userid") & " ")
next
dttable.defaultview.sort="userid asc" '设定defaultview 的排序
条件
response.write("<p>datatable.defaultview 的资料:<br>")
for shtr=0 to dttable.defaultview.count-1 '显示dataview 整
理的资料
response.write("顺序" & (shtr+1).tostring & " " & _
dttable.defaultview(shtr)("userid") & " ")
next
end sub
</script>

 我们可以利用dataview 的rows 集合取回被dataview 对象整理过的数据,所以上述范例的执行结果如下所示:


筛选记录
要筛选记录,可以使用dataview 对象的rowfilter 属性以及rowstatefilter 属性。rowfilter属性可以利用比较运算子「<」、「>」、「<=」、「>=」以及「like」来过滤记录中的数据,其语法如下所示:

dataview.rowfilter = "条件叙述"

下列范例设定defaultview 的rowfilter 属性,只有台北县的记录会被显示出来:

<%@import namespace=system.data.ado%>
<%@import namespace=system.data%>
<script language="vb" runat="server">
sub page_load(sender as object, e as eventargs)
dim strconstr as string = "provider=microsoft.jet.oledb.4.0;" & _
"data source=c:\inetpub\wwwroot\cr\ch05\myweb.mdb"
dim strcomstr as string = "select * from members"
dim dsca as adodatasetcommand = new adodatasetcommand(strcomstr,
strconstr)
dim dsdataset as dataset = new dataset()
dsca.filldataset(dsdataset, "members")
dim dttable as datatable = dsdataset.tables("members")
dim shtr as short
dttable.defaultview.rowfilter ="useradd like '台北县%'"
response.write("住台北县的总共有" & _
dttable.defaultview.count.tostring & " 人, 分别是: ")
for shtr=0 to dttable.defaultview.count-1 '显示dataview 整理的
资料
response.write(dttable.defaultview(shtr)("username") & " ")
next
end sub
</script>



而rowstatefilter 属性则是以记录的状态来作筛选的条件。其使用语法如下所视:

dataview.rowstatefilter = dataviewstate.状态

可过滤的字段的状态如下表所示:

下列范例中删除了一笔记录,并且利用rowstatefilter 属性显示这笔被删除的记录:

<%@import namespace=system.data.ado%>
<%@import namespace=system.data%>
<script language="vb" runat="server">
sub page_load(sender as object, e as eventargs)
dim strconstr as string = "provider=microsoft.jet.oledb.4.0;" & _
"data source=c:\inetpub\wwwroot\cr\ch05\myweb.mdb"
dim strcomstr as string = "select * from members"
dim dsca as adodatasetcommand = new adodatasetcommand(strcomstr,
strconstr)
dim dsdataset as dataset = new dataset()
dsca.filldataset(dsdataset, "members")
dim dttable as datatable = dsdataset.tables("members") '为了方便使用
dttable.rows(0).delete() '删除datatable 中的第一笔记录
dim shtr as short
dttable.defaultview.rowstatefilter = dataviewrowstate.deleted
response.write("被删除的使用者总共有" & _
dttable.defaultview.count.tostring & " 人, 分别是: ")
for shtr=0 to dttable.defaultview.count-1 '显示dataview 整理的资

response.write(dttable.defaultview(shtr)("username") & " ")
next
end sub
</script>



上述程序虽然删除了datatable 中的第一笔记录,除非使用datasetcommand 对象的update方法将所作的更动更新回数据源,否则是不会影响数据源的数据状态。

搜寻数据

要搜寻datatable 里面的数据,可以利用dataview 的find 方法。如果find 方法有找到符合的数据,则传回数据所在记录的index 值;倘若没找到则传回-1。其使用语法如下所示:

变数= dataview.find("要搜寻的字符串")

列范例可以在文字输入盒中输入数据,按下确定后利用find 方法找寻使用者的数据,并显示数据所在记录的index 值:

<%@import namespace=system.data.ado%>
<%@import namespace=system.data%>
<form id="form1" runat="server">
请输入所要查询的数据:
<input type="text" runat="server" id="text1">
<button id="button1" runat="server" onserverclick="button1_click">
查询</button>
</form>
<span id="sp1" runat="server"/>
<script language="vb" runat="server">
sub button1_click(sender as object, e as eventargs)
dim strconstr as string = "provider=microsoft.jet.oledb.4.0;" &
_
"data source=c:\inetpub\wwwroot\cr\ch05\myweb.mdb"
dim strcomstr as string = "select * from members"
dim dsca as adodatasetcommand = new adodatasetcommand(strcomstr,
strconstr)
dim dsdataset as dataset = new dataset()
dsca.filldataset(dsdataset, "members")
dim dttable as datatable = dsdataset.tables("members")
dttable.defaultview.sort="userid" '必须要指定sort 属性才可以搜

dim shtr as short
shtr=dttable.defaultview.find(text1.value) '传回符合记录的
index 值
if shtr = -1 then '如果没找到就传回-1
sp1.innertext="没找到您所输入的数据"
else
sp1.innertext="您所要找的资料在第" & shtr.tostring & " 笔记录"
end if
end sub
</script>



产生自订的dataview 对象
如果一个dataview 对象不能满足我们的需求,我们还可以建立多个dataview 对象来制定数据的显示格式。其宣告语法如下所示:

dim 变量as dataview = new dataview(数据表)

下列范例中从同一个datatable 中产生了两个自订的dataview 对象,并指定不同的数据排序方式:

<%@import namespace=system.data.ado%>
<%@import namespace=system.data%>
<script language="vb" runat="server">
sub page_load(sender as object, e as eventargs)
dim strconstr as string = "provider=microsoft.jet.oledb.4.0;" & _
"data source=c:\inetpub\wwwroot\cr\ch05\myweb.mdb"
dim strcomstr as string = "select * from members"
dim dsca as adodatasetcommand = new adodatasetcommand(strcomstr,
strconstr)
dim dsdataset as dataset = new dataset()
dsca.filldataset(dsdataset, "members")
dim dv1st as dataview = new dataview(dsdataset.tables(0))
dim dv2nd as dataview = new dataview(dsdataset.tables(0))
dv1st.sort = "userid asc" '指定依userid 由小排到大的配置
dv2nd.sort = "userid desc" '指定依userid 由大排到小的配置
dim shtr as short
response.write("dv1st 指定依userid 由小排到大的配置:<br>")
for shtr=0 to dv1st.count-1 '显示dataview 整理的资料
response.write("顺序" & (shtr+1).tostring & " " & _
" -> " & dv1st(shtr)("userid") & " ")
next
response.write("<p>dv2nd 指定依userid 由大排到小的配置:<br>")
for shtr=0 to dv2nd.count-1 '显示dataview 整理的资料
response.write("顺序" & (shtr+1).tostring & " " & _
" -> " & dv2nd(shtr)("userid") & " ")
next
end sub
</script>



我们可以将dataview 直接当成datatable 来使用,因为dataview 的数据来源还是datatable对象,所以我们对dataview 对象所执行的任何操作都会影响原来的datatable 中的数据。下列范例显示修改dataview 中的数据对原来datatable 对象的影响:

<%@import namespace=system.data.ado%>
<%@import namespace=system.data%>
<script language="vb" runat="server">
sub page_load(sender as object, e as eventargs)
dim strconstr as string = "provider=microsoft.jet.oledb.4.0;" & _
"data source=c:\inetpub\wwwroot\cr\ch05\myweb.mdb"
dim strcomstr as string = "select * from members"
dim dsca as adodatasetcommand = new adodatasetcommand(strcomstr,
strconstr)
dim dsdataset as dataset = new dataset()
dim shtr as short
dsca.filldataset(dsdataset, "members")
dim dv1st as dataview = new dataview(dsdataset.tables(0))
dim dv2nd as dataview = new dataview(dsdataset.tables(0))
dv1st.sort = "userid asc" '指定依userid 由小排到大的配置
dv2nd.sort = "userid desc" '指定依userid 由大排到小的配置
dv1st(0)("usertel")="1234567890" '修改其中一个dataview 的内容
response.write("观察原来datatable 中的数据是否有改变:<br>")
for shtr=0 to dsdataset.tables(0).rows.count-1 'datatable 中的原来数

response.write("顺序" & (shtr+1).tostring & " " & _
" -> " & dsdataset.tables(0).rows(shtr)("userid") & "
")
next
for shtr=0 to dsdataset.tables(0).rows.count-1 '显示usertel 字段的资

response.write("<br>内容" & (shtr+1).tostring & " " & _
" -> " & dsdataset.tables(0).rows(shtr)("usertel"))
next
response.write("<p>dv1st 指定依userid 由小排到大的配置:<br>")
for shtr=0 to dv1st.count-1 '显示dataview 整理的资料
response.write("顺序" & (shtr+1).tostring & " " & _
" -> " & dv1st(shtr)("userid") & " ")
next
for shtr=0 to dv1st.count-1 '显示usertel 字段的资料
response.write("<br>内容" & (shtr+1).tostring & " " & _
" -> " & dv1st(shtr)("usertel"))
next
response.write("<p>dv2nd 指定依userid 由大排到小的配置:<br>")
for shtr=0 to dv2nd.count-1 '显示dataview 整理的资料
response.write("顺序" & (shtr+1).tostring & " " & _
" -> " & dv2nd(shtr)("userid") & " ")
next
for shtr=0 to dv2nd.count-1 '显示usertel 字段的资料
response.write("<br>内容" & (shtr+1).tostring & " " & _
" -> " & dv2nd(shtr)("usertel"))
next
end sub
</script>



上列范例码修改了dv1st 这个dataview 对象中第一笔记录的数据,其修改会影响原数据源;由于dv2nd 这个dataview 的资料来源也是从原datatable 中取得,故dv2nd 的资料显示也受影响。
 
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:利用SQL 数据操作组件和MS SQL Server 联机
· 下一篇:DataView 物件
· c#中分割字符串的几种方法
· 如何获得一个表的结构信息
· C#中的“装箱”与“拆箱”
· ASP.NET中Cookie编程的基础知识(3)
· 数据系结属性--基本数据系结


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077