8.27 DataList控件的使用

来源:互联网 发布:尚学堂java笔记 编辑:程序博客网 时间:2024/05/21 22:22

今天看了一下DataList控件的使用,坐下笔记。声明一下:… 是省略号,虽然我习惯把它当成句号。

 

1 DataList控件绑定到数据库

嗯,这个和GridView控件的绑定方法差不多一样吧,可以写一个方法,基本的代码如下:

 

其中,DataList为控件的ID,datatable为DataTable类的一个实例(在ADO.NET语句中把DataSet改成DataTable就OK了,在网上看到有人说用DataTable更节省资源,没验证过)

 

跟GridView空间不同的是,DataList还有一半工作得做:

源代码视图,在<asp:DataList…></asp:DataList>中插入三条主要的语句(其他的还没试过),分别是:

<HeaderTemplate></HeaderTemplate>  (列头显示的内容,通常都是放html代码的标签前半部分,比如<table>)

<ItemTemplate></ItemTemplate>  (数据元素,也就是数据的内容,通常都是放可以重复的html代码,比如<tr><td>content</td></tr>)

<SeparatorTemplate></SeparatorTemplate>  (两条数据之间的分隔符,这个就不用比如了,html中实线虚线图片随便挑)

<FooterTemplate></FooterTemplate>  (列尾显示的内容,通常都是放html代码的标签后半部分,比如</table>)

 

嗯,还有最后一步,就是把数据库中每一行的数据显示出来,实现这个步骤的代码如下:

<%#DataBinder.Eval(Container.DataItem, "[name]")%>  (可以把这个东东想象成一个string类型的列内容,里面的[name]是数据库中的一个列的字段,你懂的)

把上面的代码放在<ItemTemplate></ItemTemplate>中间就OK了,当然中间还可加入一些想要的内容,比如:

<ItemTemplate><tr><td><%#DataBinder.Eval(Container.DataItem, "[name]")%></td></tr></ItemTemplate>

 

要显示N个列就添加N个<%…%>

 

至此,将DataList控件绑定到数据库就算OK了,看起来比GridView复杂很多,操作起来倒不会。而且个人感觉,DataList控件比GridView控件灵活,哈哈。

 

2 DataList实现分页

感觉还是先记一下分页比较好,因为DataList分页的实现只要改变一下数据绑定就OK了,将上面方法的代码改一下,具体如下:

上面的代码就可以实现分页了…

不过还有一个问题:如何实现翻页?上面的代码只能显示第一页的5条记录(PageSize设置成5了)…

分页还得实现一些常用的功能,比如:

总页数:15  当前页数:1    首页  上一页  下一页  末页

 

实现起来也不算麻烦,具体步骤如下:

首先添加几个控件(控件类型和ID不是固定的,可以根据个人喜好):

总页数:     //这是个Label控件,Text属性设置为:总页数:

15:          //这是个Label控件,Text属性没要求,ID设置为:lblTotalValue

当前页数:  //这是个Label控件,Text属性设置为:当前页数:

1               //这是个Label控件,Text属性设置为:1(因为页面刚加载就是显示第一页),ID设置为:lblTotalValue

首页           //这是个LinkButton控件,Text属性设置为:首页),ID设置为:lbtnFirst

上一页        //这是个LinkButton控件,Text属性设置为:上一页),ID设置为:lbtnPrevious

下一页        //这是个LinkButton控件,Text属性设置为:下一页),ID设置为:lbtnNext

末页           //这是个LinkButton控件,Text属性设置为:末页),ID设置为:lbtnLast

 

控件添加OK之后,在上面的some other code 1 插入如下代码:

当点击后面四个LinkButton后,浏览器要跳转到相应的页面,这当然免不了Click事件,添加事件,代码如下:

 

上面的代码不难理解,必须注意的是:4个事件都是在设置“当前页”也就是lblTotalValue的Text属性值,因为一旦lblTotalValue的Text属性值确定下来,根据GetBind()方法中的

int currentIndex = Convert.ToInt32(this.lblCurrentValue.Text) - 1;

pagesource.CurrentPageIndex = currentIndex;

这两句代码就可以让浏览器跳转至指定页面。

 

还有一个问题:当前页数为1的时候,“首页”和“上一页”这两个功能应该禁止触发。同理,当前页数为末页的时候,“末页”和“下一页”这两个功能应该禁止触发。在some other code 2 处插入如下代码:

至此,分页功能也就基本实现了。

 

3 DataList实现列操作

要实现能在页面上对数据进行操作(增删查改),首要步骤就是要能定位到数据表中的具体元素位置。

感觉就像CSS和Javascript一样,要先找到对象然后才能实行设置。

 

嗯,首先要先添加一个CommandName属性,添加的具体位置如下:

<ItemTemplate><asp:Button ID="id" runat="server" Text="…" CommandName="commandname" /></ItemTemplate> 

添加一个事件:ItemCommand(跟点击事件差不多,要触发事件就得添加CommandName属性,看下面就知道了)

要获取上面Button的Text属性的值,可以通过如下代码:

当然,如果想获取<%#DataBinder.Eval(Container.DataItem, "[name]")%> 代表的值,可以把添加一个Label控件,然后设置Label控件的Text=<%#DataBinder.Eval(Container.DataItem, "[name]")%>

代码如上,根据Label控件的属性就可以获取Text的值。

 

还有一个问题,怎么获取没有显示的列的内容呢,比如说表的主键[id]?

可以通过如下代码获得:

datatable就是绑定到DataList的数据表。

 

在网上还看到另外一种办法,不过我试过后没成功,断了N久的点也没看出哪里出错了,先记下来,代码如下:

想法大致就是:想把已经绑定到DataList的数据表取出来保存在dt中,然后再从dt中取出想要的[id]字段中的值。应该没错,不过用断点发现dt的值为null,搞不明白…

 

睡觉了,困…

原创粉丝点击