分享
 
 
 

ASP.NET中的datagrid控件初步

王朝asp·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

datagrid控件是.net中最丰富最复杂的控件,它支持记录排序和分页!本文代码用VB.NET编写。

<%import namespace="system.data.oledb"%>

<script runat="server">

sub page_load

if not ispostback then

databind

end if

end sub

sub databind

dim strsql as string

dim objconn as oledbconnection

dim objcomm as oledbcommand

objconn = new oledbconnection("provider=microsoft.jet.oledb.4.0;data source="&server.mappath("*.mdb"))

strsql = "select * from table_name "

objcomm = new oledbcommand(strsql,objconn)

objconn.open()

mydgrd.datasource=objcomm.executereader()

mydgrd.databind()

objconn.close()

end sub

</script>

<html><body>

<asp:datagrid

id = "mydgrd"

runat="server"

/>

</body></html>

上面代码就不需要解释很多了,第一行是导入名称空间,这里用的是ACCESS数据库,如果是用SQL的话就应该是<%@ import namespace="system.data.sqlclient"%>

在这里,ID为"mydgrd"的datagrid控件将显示数据表中的所有字段的值,但有时我们并不需要显示所有的字段值,如何实现呢?那就要修改datagrid控件的autogeneratecolumns属性了,默认下是true,表示显示数据表中的所有字段值,如果设为false则可由我们自己控制了!现在修改一下上面的代码!

<%import namespace="system.data.oledb"%>

<script runat="server">

sub page_load

if not ispostback then

databind

end if

end sub

sub databind

dim strsql as string

dim objconn as oledbconnection

dim objcomm as oledbcommand

objconn = new oledbconnection("provider=microsoft.jet.oledb.4.0;data source="&server.mappath("*.mdb"))

strsql = "select * from table_name "

objcomm = new oledbcommand(strsql,objconn)

objconn.open()

mydgrd.datasource=objcomm.executereader()

mydgrd.databind()

objconn.close()

end sub

</script>

<html><body>

<asp:datagrid

autogeneratecolumns = "false"

id = "mydgrd"

runat="server"

>

<columns>

<asp:boundcolumn

headertext="作者"

datafield="authors"

/>

<asp:boundcolumn

headertext="联系电话"

datafield="phone"

/>

</columns>

<asp:datagrid>

</body></html>

注意:

此时我们在datagrid控件中设置了autogeneratecolumns=false,这表示不允许datagrid自动生成列,此时可以由我们自己控制了,然后

<columns>

<asp:boundcolumn

headertext="作者"

datafield="authors"

/>

<asp:boundcolumn

headertext="联系电话"

datafield="phone"

/>

</columns>

<columns>标记代表datagrid中的所有列,boundcolumn是datagrid的默认列,用来显示记录。这里我们声明了二个boundcolumn列,并用headertext属性定义了该列的字段名为"作者",否则默认时会显示authors了,该列的值来自数据表中的authors字段.接下来用一个bouncolumn列显示phone,每位作者的联系电话。所以该代码的执行效果会与上一个完全不同,它只会显示authors和phone二字段的值!

上面我们谈到了在datagrid控件中显示数据,并且也谈到了在datagrid控件中显示部分数据,但在测试的过程中发现,如果数据表中有1000条记录,则datagrid控件中会对应地生成1001行,很明显,这不符合我们的习惯,所以这次我来介绍一下在datagrid对记录进行分页!

对于分页功能,有一个要求,只有在datagrid控件的数据源实现了Icollection接口的情况下启用分页功能,datareader没有实现此接口,所以要使用datatable来代替,关于datatable请参考我写的dataset初步,可在文章系统中找到。

在datagrid控件中进行分页不需要像ASP中那样,只需要一个子过程和触发此子过程的事件就行了,与ASP比起来显得简单得多。不多说了,let's Go!

<%@ import namespace="system.data.oledb"%>

<%@ import namespace="system.data"%>

<script runat="server">

sub page_load

if not ispostback then

databind

end if

end sub

sub databind

dim strconn as string

dim strsql as string

dim mydst as dataset()

dim mydad as dataadapter

dim objconn as oledbconnection

strconn = "provider=microsoft.jet.oledb.4.0;data source="&server.mappath("your_database.mdb")

strsql = "select * from table_name "

mydst = new dataset()

objconn = new oledbconnection(strconn)

mydad = new oledbdataadapter(strsql,objconn)

mydad.fill(mydst)

mydatagrid.datasource=mydst

mydatagrid.databind()

end sub

sub page_changed(s as object, e as datagridpageindexchangedeventargs)

mydatagrid.currentpageindex=e.newpageindex

databind

end sub

</script>

<body>

<form runat="server">

<asp:datagrid

id="mydatagrid"

allowpaging="true"

onpageindexchanged="page_changed"

pagerstyle-mode="numericpages"

pagesize="15"

runat="server"

/>

</form>

</body>

下面来分析一下代码,这段代码与前面比起来有一部分差异,首先我们导入了一个新的名称空间<%@ import namespace="system.data"%>,因为前面说过了,要启用分页功能必须要实现Icollection接口,所以要导入system.data名称空间;然后写了三个子过程,第一个子过程在页面被初次调用时就进行databind子过程。第二个子过程就是前面说过的进行数据绑定了。关键看第三个子过程,过程名为page_changed,注意它的二个参数,当触发此子过程时,把名为mydatagrid控件的当前页面索引值改为新的索引值mydatagrid.currentpageindex=e.newpageindex,然后重新绑定数据到该控件上。

page_changed子过程在什么情况下被触发呢?所以我们在datagrid控件中重新设置了4个属性值:

allowpaging="true"

onpageindexchanged="page_changed"

pagerstyle-mode="numericpages"

pagesize="15"

第一行代码是允许进行分页,如果想实现分页功能,该属性必须设置成true,默认下是false

第二行是触发page_changed子过程的事件

第三行是设置分页导航的显示模式,这里设置是数字模式,即1 2 3 4 5 ……,默认是nextprev(上一页 下一页)

第四行是设置每页显示的记录数,这里设定是每页显示15第记录,默认为10条记录

通过这些代码就可以实现datagrid的分页功能了,当然这里会显示数据表中的所有字段,如果不想显示所有字段,请相应地把datagrid的autogeneratecolumns改成false,具体方法请参考前面的教程。

好了,实现datagrid的分页功能就已经完成了,在后面将介绍datagrid的排序功能!

下面谈一下在datagrid控件中对字段进行排序,要想允许对datagrid中的列进行排序,应将allowsorting属性值设为true并将一个子过程与sortcommand事件相关联,还是以例子进行说明:

<%@ import namespace="system.data.oledb"%>

<script runat="server">

sub page_load

if not ispostback then

databind("id")

end if

end sub

sub databind(strsort as string)

dim strconn as string

dim strsql as string

dim objconn as oledbconnection

strconn = "provider=microsoft.jet.oledb.4.0;data source="&server.mappath("your_database.mdb")

strsql = "select * from table_name order by "&strsort

objconn = new oledbconnection(strconn)

objconn.open()

&nb

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有