aspnet教程详解(7)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

ItemDataBound•对于每行数据显示的时候都会调用ItemDataBound事件,在这个事件中可以对当前行进行处理,事件对象主要成员:–1、e.Item.ItemType为当前行的类型,Item为ItemTemplate行、AlternatingItem为AlternatingItemTemplate行,还有Header、Footer等取值。–2、ItemIndex当前行的序号–3、DataItem当前行绑定的对象。•如果要在ItemDataBound事件中对ItemTemplate模板中的控件做处理,则必须使用runat=server的ASP.Net控件或者HTML控件,为控件设置Id,然后用FindControl根据Id来取得控件。注意在ASP.Net的模板中不能直接通过控件的Id来操作控件,必须用FindControl找到控件才能操作。案例:年龄大于30行的文本框变为红色;年龄大于30行的行变为红色。ItemCommand•可以在模板中放置Button控件(Button、LinkButton、ImageButton),模板中的按钮一般不写OnClick事件响应,而是响应Repeater的ItemDataBound事件。•为Button控件设定CommandName、CommandArgument属性,然后在ItemDataBound事件读取e的CommandName、CommandArgument属性就可以获得发生事件的命令和行参数了。如果对数据进行了操作,则需要Repeater1.DataBind()来重新绑定,从数据库中刷新最新的数据。•案例:涨一岁,给被点击的行的年龄增加1。•练习:人员管理程序(Id、用户名、启用状态),增加【禁用】当前行按钮,点击【禁用】点击的时候提示是否真的要禁用,如果确实要禁用则将“启用状态”字段设置为“禁用”。禁用字段显示为红色文字。字段变为禁用后,行显示【启用】按钮,点击【启用】按钮将“启用状态”字段设置为“启用”。即使没有设置AlternatingItemTemplate偶数行也被识别为ItemType=AlternatingItem•鼠标移动到一个人员行上的时候行背景颜色为黄色高亮显示。ListView•Repeater一般只用来展示数据,如果要增删改查则用ListView更方便。使用向导(强类型数据)来使用ListView会自动生成很多模板,免去手写模板代码的麻烦,再进行手工调整即可。•首先设定数据源,然后点击智能提示中的“配置ListView”,选择一种布局和样式,然后根据需要勾选“启用编辑”、“启用删除”、“启用插入”、“启用分页”,就会自动生成常用的模板。注意这只是提高开发效率的一个快捷方式,不是唯一的途径。•LayoutTemplate为布局模板,布局模板中必须有一个ID为itemPlaceholder的服务端控件(4.0以后不需要),什么类型无所谓,不会被显示,itemPlaceholder前面就是相当于Repeater中的HeaderTemplate,itemPlaceholder后面就是相当于Repeater中的FooterTemplate,因此ListView中没有这两个模板。•ItemTemplate是每一项的模板,AlternatingItemTemplate是隔行显示的模板,和Repeater一样。EmptyDataTemplate为数据源没有数据的时候显示的内容(Insert也算数据),这样的话可以实现“没有查找结果”、“对不起,找不到您要找的数据”等,InsertItemTemplate为插入数据界面的模板,EditItemTemplate为编辑数据的模板,InsertItemTemplate,为插入数据的模板,SelectedItemTemplate为标记为Selected的行的模板。•1、生成的样式要提到style中,不要内联样式。•2、ItemTemplate里面一般也没必要用asp:Label展示只读数据,所以直接输出%#Eval(Name)%•3、LayoutTemplate中必须有一个id为itemPlaceholder(net.itcast.cn)的服务端控件,之上为头,之下为尾。•4、LayoutTemplate表头内容要汉化,所有Template中的不需要显示的字段,比如Id,都要删掉。ListView•EditItemTemplate、InsertItemTemplate中控件的绑定表达式为Text='%#Bind(Age),因为Eval只是计算表达式的值输出,而Bind不仅可以计算表达式的值输出,还可以将用户填入的值更新到数据中,因此Eval是单向绑定,Bind是双向绑定。•通过每行的Insert、Delete、Edit、Cancel等Command进行增删改,这几个CommandName被ListView内部处理,不需要开发人员处理,因此自定义的CommandName不要和他们重复。ListView中可以像Repeater那样为行增加Command按钮,处理方法和Repeater一样,ListView也支持Repeater那样的ItemDataBound事件。和Repeater的不同点:–1、判断数据行的类型e.Item.ItemType==ListViewItemType.DataItem(编辑模板也放在这里)–2、取得行对应的DataRowView:ListViewDataItemlvDataItem=(ListViewDataItem)e.Item;DataRowViewrowView=(DataRowView)lvDataItem.DataItem;–3、在FindControl的时候注意AlternatingItemTemplate的问题。•ListView中可以使用Validator,只要将Validator放入相应的模板中,将Validator手动设为要验证的控件的Id,然后设定相应按钮、控件、Validator为同样的ValidationGroup,防止不同模板中的Validator互相干扰。将Cancel按钮的CausesValidation=falseListView•新增数据行的默认值:响应ListView的ItemCreated事件(每一行的在页面上的创建都会触发这个事件),当e.Item.ItemType为InsertItem的时候通过FindControl找到控件然后初始化。比如给年龄默认值。•ObjectDataSource绑定Id为Guid类型的表的时候会生成一个“DataObjectTypeName=System.Guid”,有问题,删掉就行。•插入数据的初始化:注意和“新增数据行”不同,“插入数据的初始化”是在用户点击“插入按钮”之后执行。比如如果主键为Guid,则需要在数据插入数据库之前为主键赋值。响应ListView的ItemInserting事件(将一些插入数据库之前的对数据进行调整的代码),e.Values为所有字段的键值对,可以读取插入的值,也可以向字段中写值,这样就可以为Id赋值e.Values[Id]=Guid.NewGuid()。在这个事件中对数据进行校验,可以通过e.Cancel=true来取消非法数据插入。•更新之前的处理:就像数据插入前可以在ItemInserting事件中处理一样,可以在ItemUpdating事件中对更新过程进行处理,e.ItemIndex可以取到当前更新行的行号,e.OldValues可以取到更新前的值,e.NewValues可以取到更新后的值,可以通过e.Cancel=true来取消非法数据插入。同理是ItemDeletingDropDownList的绑定•补充,有的模板中可以绑定•ListView中是无法像TextBox等控件那样将DropDownList的选中值绑定到数据的字段的,必须编程处理。例子,人员的性别(男、女、保密),三个值固定写在DropDownList中。–1)在显示数据的时候DropDownList显示数据的值。在ItemTemplate中加入DropDownList,设定DropDownListEnabled=false,这样就是只读的。在ItemDataBound事件中e.Item.FindControl()来找到DropDownList控件,然后ListViewDataItemlvDataItem=(ListViewDataItem)e.Item;DataRowViewrowView=(DataRowView)lvDataItem.DataItem;取到DataRowView进而取到DataRow,读取数据的值,然后赋值给DropDownList的SelectedValue属性。也会同步的处理EditTemplete的展示,由于ListView的ItemType处理的不明确,因此需要判断绑定的DataItem数据、FindControl的值是否为空。–2)在插入数据的时候设定DropDownList对应的字段的值,响应ItemInserting事件,通过e.Item.FindControl找到DropDownList控件,然后通过e.Values设定值–3)在数据更新的时候设定DropDownList对应的字段的值,响应ItemUpdating事件,通过ListViewDataItemdataItem案例:友情链接管理。•需求:后台提供友情链接增删改的页面。友情链接字段:序号、网站名、友情链接类型(文本超链接、图片超链接)、Logo地址、链接地址。要进行数据的非空校验等非法值校验:序号必填必须为整数,网站名必填、链接地址必填;当友情链接类型为文本超链接的时候Logo地址隐藏、当友情链接为图片超链接的时候Logo地址显示。•展示页面:在首页底部提供文本友情链接和Logo友情链接两个区域,没有Logo地址的显示在文本友情链接区,有Logo的显示在图片友情链接区;每行最多5个友情链接条目,超过则折行。案例:入库单管理•需求:提供入库单明细的增删改查页面。字段:Id(Guid类型)、类型(可选值:采购入库、盘盈入库、退货入库,值来自于另外一张入库单类型表)、入库日期(默认为当天,ItemCreated,使用JQueryUI的datepicker控件)、单价、数量、金额。所有字段都不能为空,当用户输入单价或者数量之后自动计算金额(金额=单价*数量),考虑折扣因此金额可以不等于数量*单价,用户还可以修改计算以后的金额。如果数量为负值(红单),则此行显示为红色背景。不允许修改、删除。行命令按钮•ListView的行按钮和Repeater一样,不同的是取当前行数据的方式。intindex=((ListViewDataItem)e.Item).DisplayIndex取出操作行的行号,ListView1.DataKeys[index].Value取出主键的值,如果对数据进行了操作,最后要对ListView执行DataBind刷新数据。由ListView的DataKeyNames属性决定存储哪些字段值为主键,可以多个主键(和数据库主键没有直接关系),所以有Values。•排序:将LayoutTemplate中的表头用asp:LinkButtonrunat=serverCommandName=SortText=IdCommandArgument=Id/代替,其中CommandArgument的值为排序字段。只要是CommandName、CommandArgument对就行,展现成什么、显示在哪儿都可以。•案例:“涨一岁”按钮综合练习:用户管理•字段:主键、用户名、用户类型(超级用户、系统管理员、用户)、创建日期、密码、是否禁用。密码以MD5值保存。密码不显示、密码不允许管理员修改,管理员创建的时候给初始密码888888(和主键为Guid类型的一样,在Inserting的时候e.Values[Password]=

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功