设计分页与空白样板
样板本身是一块在网页执行期间会动态显示的HTML区域,在这个区域里除了可以配置一般的网页元素,最重要的是,它允许开发人员为其中的控件设置特殊的指令或是进行数据绑定,以达到某些需要经过编写程序才能实现的功能。这里从比较单纯的GridView样板谈起,将一个GridView控件拖曳到网页上的时候,如下图所示,单击其中的智能型标签将其展开:
再单击其中的"编辑样板"项目,切换到"样板编辑模式",如下图所示,其中出现了可用的样板列表,单击"显示"列表箭头按钮,出现可用的样板清单。在默认的情形下,界面上出现的是EmptyDataTemplate。如图所示,其中的空白区域可以让网页开发人员自行设计内容,而这个内容在GridView没有任何数据出现的时候显示在网页中,读者可以自行尝试。完成设计之后,单击"结束编辑"即可回到原来的设计界面,如果你尝试执行网页,而其绑定的数据源完全没有任何一笔数据的话,便会呈现此内容。
以前面的示例空白样板为例,其中输入了找不到数据的内容,并且将其背景设为浅蓝色,它的内容显示如下。
现在我们来看看分页样板,在菜单中单击PagerTemplate,切换到PagerTemplate样板的编辑界面,如下图所示,其中空白区域用来设计自定义的GridView的分页功能列。
设计PagerTemplate之前,必须先启用GridView的分页功能,在智能型标签的工作面板中,勾选"启用分页"复选框即可,如下图所示:
一旦打开了分页的功能,在默认的情形下,GridView以数字作为页码索引显示在GridView底部。开发人员可以通过修改分页样板调整此默认外观,例如以按钮替代索引码,打开PagerTemplate编辑界面,在其中配置4个按钮,如下图所示:
这4个按钮,分别提供"第一页"、"前一页"、"后一页"和"最后页"的功能,现在将这些按钮与相关的功能链接起来,以【|<】按钮为例进行说明。切换到属性设置窗口,如下图所示,将CommandName属性设置为Page,而CommandArgument属性设置为First。
CommandName的Page代表这个按钮被单击的时候,要执行分页导航的功能,而CommandArgument表示要显示的分页,这里设置为First,表示要跳到第一页。下表列举每一个分页指令参数值的意义。
CommandArgument 值 |
说 明 |
Next |
导航至下一页 |
Prev |
导航至上一页 |
First |
导航至第一页 |
Last |
导航至最后一页 |
整数值 |
导航至指定的页码 |
其他几个按钮依据上表中的CommandArgument 值设置即可,在浏览器中执行的结果如下图所示:
如上图所示,由于我们设置了PagerTemplate,在其中配置了4个分页按钮,因此这些按钮在网页的下方取代了原来的数字导航链接。
除了指定"Next"、"Prev"等特定的导航分页外,我们还可以通过指定整数值让网页能够导航到某个特定的分页。有两种方法,直接将链接控件的CommandArgument设为指定分页的页数,或是在程序中设置GridView的分页索引值PageIndex。前者的方法与4种特定的导航分页相同,这里就不再说明。我们来看看如何实现后者的方法。
指定分页索引值的语法如下,当这一行程序代码执行的时候,GridView会跳到索引值所指定的分页。
GridViewControl.PageIndex = indexNumber ; | 上述程序代码非常简单,麻烦的地方在于如何取得indexNumber,通常我们会提供一个让用户指定页数索引的控件,然后通过此控件取得用户指定的页次。例如,在上述示例的分页样板中插入下面的控件,其中的文本框让用户输入分页的索引值,当用户单击按钮【GO】的时候,GridView会显示指定的分页内容,如下图所示。
无论如何,我们必须取得用户输入文本框中的数字,将其指定给GridView控件的PageIndex索引,而这个文本框位于PagerTemplate当中,因此我们没有办法直接取得此文本框的字段,而是必须通过GridViewRow间接取得。切换到网页的原始文件,内容如下:
<PagerTemplate> <asp:Button … /> … … <asp:TextBox ID="pageNumber" runat=" server" Width="30px"></asp:TextBox> <asp:Button ID="btnGo" runat="server" Text="GO " OnClick="btnGo_Click" /> </PagerTemplate>if
| 我们在分页样板的设计区域中所放入的控件均位于<PagerTemplate>标签中,因此首先必须取得此标签的内容参照,才能进一步取得其中的文本框值。现在切换到上述网页的后置程序代码文件中,在按钮【GO】的Click事件处理程序中,输入下面的程序代码:
protected void btnGo_Click(object sender, EventArgs e) { GridViewRow pagerRow = GridViewPage.BottomPagerRow; TextBox theindex= (TextBox)pagerRow.Cells[0].FindControl("pageNumber"); if (theindex.Text.Length > 0) { GridViewPage.PageIndex = int.Parse(theindex.Text) - 1; } } | 其中通过BottomPagerRow的属性,取得分页样板的参照,再通过FindControl进一步取得名称为pageNumber的控件,也就是页面上的文本框,最后再将其中的值指定给pageIndex属性。由于分页索引以0为起始值,因此还要将其减1。现在在浏览器中执行网页,出现以下的页面,其中多了一个分页索引栏,输入想要浏览的页次索引,单击【GO】按钮,即可链接到指定的页面中,如下图所示。
除了这两种默认的样板,GridView还有其他几个可用的样板,例如ItemTemplate、AlternatingItemTemplate和EditItemTemplate等。这些样板以字段为对象,必须通过样板字段进行设置,由于它们比较特殊,我们在后面再进行说明。至于DetailView 的样板设计,它的原理与GridView相同,读者可以自行尝试打开智能型标签,切换各种面板进行设置,查看其效果。
|