首页 > 语言 > 关键词 > ASP.NET最新资讯 > 正文

ASP.NET立即上手教程(12)

2007-09-21 09:29 · 稿源:网页教学网

数据访问和定制

模板控件介绍

前面几个章节演示的DataGrid控件,对于许多需要使用类似表格那样来展示数据的web应用程序来说是非常适合的。但许多时候,需要用更丰富的形式来显示数据。Asp.net提供了两个控件,DataList和Repeater,对于类似列表的数据提供了非常灵活的控制方式。这两个控件是基于模板的,所以没有自己默认的表现。实施数据的方法完全由控件模板的执行,该模板描述如何呈现数据项目。

类似于DataGrid控件,DataList 和 Repeater支持DataSource属性,该属性可以被设置为任何ICollection, IEnumerable, 或 IListSource类型。DataSource(数据源)中的数据可以使用DataBind方法来绑定。数据一旦被绑定,每个数据项的格式就可以由模板来描述。

ItemTemplate 属性控制数据源集合中每个项目的展现。在ItemTemplate内部,你可以定义任意的表达代码(HTML 或者其他)。

使用ASP.NET 的数据绑定语法,你可以从数据绑定中插入值到DataList 或 Repeater控件,就象下面这样。

以下为引用的内容:
<ASP:Repeater id="MyRepeater" runat="server">
  <ItemTemplate>
    Hello <%# DataBinder.Eval(Container.DataItem, "name") %> !
  </ItemTemplate>
</ASP:Repeater>

Container 从名称空间System.Web.UI.INamingContainer 直接继承。在这种情况下,Container 解析为一个System.Web.UI.WebControls.RepeaterItem类型的对象,他有一个DataItem属性。 就像Repeater 重复数据源集合一样,DataItem 包含该集合中的当前项。例如,如果雇员字段对象的数据源被设定为ArrayList,DataItem 就是雇员类型的。当绑定到DataView,DataItem 则是DataRowView类型 。

下面的例子演示了一个Repeater 控件绑定到DataView (从sql查询返回)。同时定义了两个模板:HeaderTemplate 和 FooterTemplate ,分别用来展示列表的开头和结尾。

Repeater控件用来重复数据源集合中的数据,为数据源集合中的每一个项目使用一次ItemTemplate,但是不显示任何没有包含在模板中的元素。相对于Repeater的重复数据, DataList提供了一些额外的功能来控制列表的布局。与Repeater不同,DataList 使用额外的语法元素,如包含风格属性的表的行、列和跨列等等,在模板定义之外来丰富外观的格式。例如,DataList支持RepeatColumns 和 RepeatDirection 属性,分别用来指定数据是否以多列的样式显示,以及优先排列的方向(水平或者垂直) DataList 也支持样式属性,如下面的代码:

以下为引用的内容:
<ASP:DataList runat="server" DataSource="<%#MyData%>"
  RepeatColumns="2"
  RepeatDirection="Horizontal"
  ItemStyle-Font-Size="10pt"
  ItemStyle-Font-Name="Verdana"
>
  ...
</ASP:DataList>

注意:本章的剩余部分集中讲解了DataList控件的许多功能。Repeater 空间的更多信息,参考本教材中“web form 控件参考”章节中的“repeater”主题。

下面的例子演示了DataList控件的用法。注意数据项的外观已经和上一个例子中的有所不同,其实仅仅改变了一下控件ItemTemplate的属性。RepeatDirection 和 RepeatColumns属性决定了ItemTemplates的显示样式。

下面的例子更进一步演示了通过改变ItemTemplate来达到模板的多姿多彩的变化。这次,DataItem的一个值使用<img>标签的"src"属性来替代。DataBinder.Eval的格式化字符串参数也在URL查询字符串中替换了DataItem的值。

处理模板中的返回

如同在DataGrid一样,你可以从DataList模板激活一条命令,该模板通过绑定到DataList自身来传递事件句柄。例如,ItemTemplate中的LinkButton可以激活Select命令。通过设定DataList的OnSelectedIndexChanged属性,能够调用一个事件句柄来响应这条命令。请看下面的代码:

以下为引用的内容:
<ASP:DataList id="MyDataList" OnSelectedIndexChanged="MyDataList_Select" runat="server">
  <ItemTemplate>
    <asp:linkbutton CommandName="Select" runat="server">
      <%# DataBinder.Eval(Container.DataItem, "title") %>
    </asp:linkbutton>
  </ItemTemplate>
</ASP:DataList>

在MyDataList_Select 事件句柄中,组合了几个其他的服务器控件,来表述被选中项目的详细资料。

注意,当DataList辨别一些特定的命令如Select和 Edit/Update/Cancel的时候,在模板中激活的命令字符串可以是任意的字符串。对于所有的命令, DataList的OnItemCommand 被激活。就像上面的例子一样,你可以绑定这个事件到事件句柄。

以下为引用的内容:
<script runat="server">
  protected void MyDataList_ItemCommand(Object sender, DataListCommandEventArgs e) {
    String command = e.CommandName;
    switch(command) {
     case "Discussions":
      ShowDiscussions((DataRowView)e.Item.DataItem); break;
     case "Ratings":
      ShowRatings((DataRowView)e.Item.DataItem); break;
    }
  }
</script>
<ASP:DataList id="MyDataList" OnItemCommand="MyDataList_ItemCommand" runat="server">
  <ItemTemplate>
    <asp:linkbutton CommandName="Ratings" runat="server">
      View Ratings
    </asp:linkbutton>
     <asp:linkbutton CommandName="Discuss" runat="server">
      View Discussions
    </asp:linkbutton>
  </ItemTemplate>
</ASP:DataList>

注意,由于不仅一个命令可以激活这个事件句柄,所以你必须使用选择语句来决定具体的命令。

使用选择和编辑模板

除了使用页面级的事件句柄来处理Select命令以外,也可以使用DataList来内部处理这种事件。如果为DataList定义了一个SelectedItemTemplate,DataList就会通过激活Select命令的数据项来实施这个模板。下面的例子中使用SelectedItemTemplate来使被选择的书名标题字体加粗。

DataList 还支持EditItemTemplate,来编辑索引值等于DataList的EditItemIndex属性的项目。关于编辑和更新工作的细节问题,参考本教材中“数据访问”章的“更新数据”主题。

在模板中查找控件

有些时候,我们很有必要查找包含在模板中的控件。如果在模板中给定了控件的ID号,那么就可以从他的容器(支持InamingContainer的父层中的第一个控件)中取得他的有关信息。在这种情况下,容器是DataListItem控件。注意,即使几个控件具有相同的ID号(具有DataList的循环优点),每一个也是被逻辑的包含在DataListItem容器控件的名称空间中。

你能够通过遍历DataList的Items集合来取得DataListItem,然后调用DataListItem的 FindControl方法(从Control基类继承而来)取回具有特定ID号的控件。

以下为引用的内容:
<script runat="server">
  public void Page_Load(Object sender, EventArgs E)) {
    // set datasource and call databind here
    for (int i=0; i<MyDataList.Items.Count; i++) {
      String isChecked = ((CheckBox) MyDataList.Items[i].FindControl("Save")).Checked.ToString();
      If (isChecked == "True") {
       ...
      }
    }
  }
</script>
<ASP:DataList id="MyDataList" runat="server">
  <ItemTemplate>
     <asp:CheckBox id="Save" runat="server"/> <b>Save to Favorites</b>
  </ItemTemplate>
</ASP:DataList>

下面的例子演示了刚才的技术。

本章小结
1、DataList和Repeater提供给开发者微调数据绑定列表的外观显示格式。

2、使用模板来表现绑定数据的显示,例如HeaderTemplate、FooterTemplate、或者ItemTemplate 。

3、Repeater控件是一般目的的重复,他的模板中没有的东西,都不会显示。

4、DataList 控件对项目的布局和样式提供了更多的控制,可以格式化输出自己的表现代码。

5、DataList 支持Select, Edit/Update/Cancel,以及 Item Command 事件。通过绑定事件句柄到DataList的 Command 事件,可以在页面级别处理Item Command。

6、DataList支持SelectedItemTemplate 和 EditItemTemplate 两个模板, 用来控制选定时的样式和编辑时的表现样式。

7、使用Control.FindControl方法,可以通过程序来取得模板中的控件。该方法通过DataList的项目集合 DataListItem调用。

  • 相关推荐
  • 大家在看
  • 王自健上手华为MatePad Pro:看片完胜苹果

    6月9日晚,王自健评价华为MatePad Pro:看片秒苹果。MatePad Pro 5G是华为Mate系列新一代平板电脑,首销到手价为4999元。MatePad Pro 5G采用10.8英寸2K分辨率全面屏,屏占比90%,搭载麒麟

  • Esprinet以3400万欧元收购GTI

    [TechWeb]意大利批发商Esprinet宣布已与GTI达成协议,以购买该公司100%的股份。这项行动共计3380万欧元,将在当局于9月底批准时以现金支付。通过购买GTI,Esprinet凭借收入和与Tech Data的距离本身,成为西班牙市场上第一家批发商,该公司在过去几年中一直与该公司争夺排名第一的位置。此外,GTI将提供Esprinet,该公司在西班牙经营JoséMaríaGarcía(这是一项补充业务),该业务是通过云销售的软件,尤其是Microsoft的软件。?

  • Planet将通过SpaceX的火箭发射6颗Skysat卫星

    DoNews 6月10日消息(记者 刘文轩)据The Verge报道,卫星影像公司Planet将在6月和7月的两次卫星发射中,采用SpaceX的火箭,各运送3颗110kg重的卫星。至于价格,SpaceX则是以每公斤500美元的价格来计算,Planet发射副总裁Mike Safyan表示,SpaceX将发射费用压低到“难以置信”的程度。Planet原本运营着60颗中解析度卫星,2017年收购Google的Terra Bella卫星影像部门后,Planet拥有了7颗高解析度Skysat卫星。在这之后,Planet又发射

  • Win10五月更新已跑上手机:电话、短信都能用

    因为Windows 10 on ARM的存在,手机上运行Windows 10操作系统便有了理论可能。事实上,从2018年以来,爱折腾的机友们就没有停止过相关项目。据外媒报道,开发者已成功为一加6、小米MIX、Galax

  • 西瓜视频开通广告收益教程

    ​西瓜视频的广告一般会展示在视频开始或结尾的地方,开通西瓜视频广告收益后,作者将享有一定的广告收益。而平台为了平衡用户体验,并不是每次刷新都会有广告出现。那么怎么开通西瓜视频广告收益呢?以下是关于西瓜视频开通广告收益的详细介绍。

  • ColorOS 7.2潮玩功能汇总,上手根本停不下来

    OPPO Reno4 系列在 6 月 5 日正式发布,作为一台主打影像以及续航的新机,OPPO Reno4 系列已经「堆料满满」。不过OPPO似乎还不满足于此,在软件层面上,OPPO 全新系统小版本ColorOS 7. 2 还为OPPO Reno4 系列带来不少有趣的玩法。(OPPO Reno4 系列发布会上ColorOS 7. 2 带来不少潮玩功能)本次OPPO Reno4 系列搭载的ColorOS 7. 2 带来了OPPO 创新产品探索平台与用户共创社区——OPPO LAB。通过OPPO LAB,OPPO可以及时将新功能与服

  • 不会演戏的网红不是好厨子 ,剧情美食教程怎么上热门?

    当你无意间刷到这些视频时,小小的眼睛里开始出现大大疑惑。惊讶中有一丝不屑,不屑中又有一丝好奇。

  • 西瓜视频PC电脑版下载教程

    西瓜视频是一个内容覆盖很广的视频APP,里面的短视频内容很丰富。不过现在只有安卓版和iOS版,有人想要下载使用PC电脑版,具体在哪里可以下载呢,这里我们来看下电脑版的具体安装方法。

  • 雷军上手Redmi K30 Pro变焦版:真全面屏的感觉无与伦比

    6月30日晚间,雷军分享了上手Redmi K30 Pro变焦版的心得体会。雷军表示,我们在讨论产品的时候,有一些米粉超爱真全面屏。在屏下相机技术还不太成熟的时候,做弹出前置相机方案是唯一的方案。

  • 网友上手MIUI 12版小米10 Pro:感觉像换了台机器

    6月18日消息,一位网友的小米10 Pro升级到了MIUI 12稳定版,表示感觉像换了一台机器一样,各种流畅、各种漂亮的动画。小米产业投资部合伙人潘九堂表示,MIUI 12加持的小米10系列更香了。据

  • 有什么不错的蓝牙降噪耳机?618超级值得上手耳机名单

    首先,蓝牙耳机不少,蓝牙降噪耳机也不少,但是好用的蓝牙降噪耳机却不是很多,我觉得能够价格上合理还很实用的,能达到物超所值的地步,我总结几款熟知的蓝牙耳机!第一款Nank 南卡A1入耳式耳塞,对入耳式感冒的朋友可以重点注意了!!南卡A1采用全球享誉的ANC降噪技术,可识别噪音,随即主动发出修正信号,淡化背景音干扰,独享宁静时光。主动降噪深度最高可达28dB,非常值得推荐的蓝牙好物!!南卡 NANK/A1真无线蓝牙耳机 ANC主

  • docker怎么安装MySQL docker安装MySQL教程

    把MySQL放进Docker,总共需要几步?本次就通过社区版容器安装2个mysql实例,看一下部署有多简单。

  • 最强蜗牛怎么换区 超详细换区步骤教程

    ​最强蜗牛中其实是可以进行换区操作的,但是很多人还不明白到底要怎么才能进行换区,所以今天就来为大家分享一下最强蜗牛换区步骤教程。

  • 即刻怎么改密码 新版本即刻密码修改教程

    即刻APP经常的会碰到要修改密码的操作,很多人还不清楚在哪可以比较方便的改密码,下面就来为大家详细的介绍一下。

  • 荒野乱斗固定摇杆设置教程 摇杆怎么固定

    荒野乱斗中是可以使用摇杆的,很多玩家还不清楚怎么让摇杆固定设置好,下面就来为大家详细的介绍一下荒野乱斗固定摇杆设置教程。

  • 拼多多黑卡怎么分享不了 详细黑卡分享图文教程

    拼多多品牌黑卡是一个非常实用的东西,里面的钱是可以购买商品的时候直接进行抵扣现金的,能节省很多钱,有些朋友也想分享一些邀请码,但是不知道怎么分享,下面就来为大家详细的介绍一下黑卡分享图文教程。

  • 怎么录制视频教程?电脑录屏可以这样做

    怎么录制视频教程?我们经常会用视频来记录自己的生活,同样可以用视频的形式记录电脑上的内容。在电脑上录制视频,最好使用一些专业的录屏软件,能够提高录屏的质量。如果你也在寻找一个实用的录屏软件,那下面分享的方法可以帮助到你!方法一:windows系统录屏先分享一个适用于Windows系统的方法,推荐使用电脑中的“问题步骤记录器”。首先,打开电脑后打开电脑运行窗口,也可以使用快捷键“win+r”,打开“。然后输入“psr”,

  • 微信拍一拍功能怎么用 详细操作步骤教程

    微信在最近上线了一个很好玩的功能——拍一拍,这个功能最近在微信上比较流行,可以拍一拍朋友,比起之前的QQ抖动功能更加的具有一点“人味”,很多人还不知道微信拍一拍怎么用,下面就来为大家分享一下教程。

  • 最全教程!OKEx平台币OKB福利盛宴来袭

    专业的羊毛党的一个原则是:没有羊毛那就创造一只羊来薅!作为背靠最牛交易所OKEx的主流平台币OKB,现在都有哪些羊毛可以薅? 今天我们汇总一下比较值得一试且100%成功的那些OKB的福利! 一、通过OKB抢6. 1 折比特币和 61 个OKB (福利指数:★★★★★) 活动页面: 6 月 1 日12:00- 6 月 5 日18:00 【福利】 1、6. 1 折比特币:现在一个比特币均价是 70000 元,抽中的小伙伴,相当于直接薅到将近 3 万元的羊毛!! 2、 61 个OK

  • 日本动画电影《无限》线上首映 西瓜视频与Netflix全球同步播出

    【TechWeb】6月18日消息,今天下午6点,日本动画电影《无限》(又名《想哭的我戴上了猫的面具》)开启全球首映,在中国通过西瓜视频、抖音、今日头条平台上线。这是继BBC剧集《德古拉》后,西瓜视频再度实现与Netflix全球同步播出影视作品。届时,用户可在上述平台中付费观看该片。 公开资料显示,《无限》由日本著名导演佐藤顺一和柴山智隆联合执导,主要讲述女生笹木美代的青春奇幻故事,主打超萌轻甜治愈风格。绰号为“无限”?

  • 参与评论
文明上网理性发言,请遵守新闻评论服务协议