6/29 原型编码阶段:(3) CommandField,TemplateField

题外话:微软不厚道,vs2005的很多控件属性框里面,如果要输入中文,有时只能用(或者先用)微软拼音,什么搜狗紫光统统不行。。。

GridView控件的CommandField支持“编辑,更新,取消”,选取和删除三种命令,而DetailsView控件支持“编辑更新取消”,删除和“添加插入取消”三种命令。
我尝试不用GridView智能标签的启用编辑,启用删除,而是编辑列,添加相应的CommandField。
不过我发现添加三个CommandField命令字段后,智能标签上的启用编辑,启用删除,和启用选定内容已经自动打钩了。

为了避免数据误删或者限制删除权限,需要修改GridView的RowDeleting事件:
None.gif      protected   void  GridView1_RowDeleting( object  sender, GridViewDeleteEventArgs e)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        e.Cancel 
= true;
InBlock.gif        Literal txtMsg 
= new Literal();
InBlock.gif        txtMsg.Text 
= "<script>alert('数据删除取消');</script>";
InBlock.gif        Page.Controls.Add(txtMsg);
ExpandedBlockEnd.gif    }

如果列表很长需要滚动页面,而 你选取,编辑了下面的记录,那么提交后页面会回到顶端,很不方便,在页面属性中添加 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="clerklist.aspx.cs" Inherits="clerklist" MaintainScrollPositionOnPostback="true"%>可以让页面回到原来操作的记录位置。

自定义命令按钮字段
添加两个原始的CommandField,而不是里面的三种类型,然后再设置ShowButton属性,将第一个CommandField的ShowEditButton和ShowInsertButton属性设成true,ButtonType设成Button,HeaderText设成"自定义一"。运行效果如下:
员工编号姓名工号部门编号按钮字段一 按钮字段二 自定义一自定义二
0001陈公客10011  
0002王公客10021  
0003张大客30013  
0004李大客30023  

如果我们想把部门编号=1的记录前景色设为红色,那么就修改GridView的RowDataBound事件:
None.gif      protected   void  GridView1_RowDataBound( object  sender, GridViewRowEventArgs e)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        
//测试作为参数传入的行类型是否是DataRow 而不是标题,页脚或者其他。
InBlock.gif
        if (e.Row.RowType == DataControlRowType.DataRow)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
//部门编号是第4个单元格,位移为3
InBlock.gif
            TableCell cell = e.Row.Cells[3];
InBlock.gif            
if (cell.Text.ToUpper() == "1")
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                cell.ForeColor 
= System.Drawing.Color.Red;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }

 显示结果如下:
员工编号姓名工号部门编号按钮字段一 按钮字段二 自定义一自定义二
0001陈公客10011  
0002王公客10021  
0003张大客30013  
0004李大客30023  

好像不是我预期的整个行的前景色都变红,只是修改了部门编号所在的单元格。要一行的文字都变红,只需要改一行:
None.gif                 // cell.ForeColor = System.Drawing.Color.Red;
None.gif                 e.Row.ForeColor  =  System.Drawing.Color.Red;

系统自带的字段BoundField,ButtonField,CommandField等属性都只能在编辑列操作的属性对话框面设置,如果要更灵活的字段展示方式,比如象ASP中的任意html标签混合rs("")可以实现任意的页面表现,在asp.net中要这么做就只能用TemplateField了。
把gridview中原来四个绑定字段删除,并添加4个templatefield字段,依次更改HeaderText为员工编号,姓名,工号,部门编号。添加完后Gridview相关列是一片空白,等待在编辑模板中进一步设置。
点击编辑模板,选择员工编号模板的ItemTemplate,拖入一个Literal控件,点击Literal控件的智能标签"编辑DataBindlings",绑定数据字段ClerkID:
caroa_4.gif
如果点击双向数据绑定,表达式就变成:Bind("ClerkID", "{0:000#}")
两者的区别是Eval用于单项绑定,数据属性只读,不能更改,一般用在Label,Literal控件上;Bind是双向数据绑定,不但能读取数据,还有Insert,Update,Delete功能,一般用在TextBox控件上。

向姓名模板的ItemTemplate添加Literal控件,绑定RealName。
向工号模板的ItemTemplae添加TextBox控件,绑定到JobNum。
页面运行结果如下:

员工编号姓名工号部门编号
0001  陈公客 1
0002  王公客 1
0003  张大客 3
0004  李大客 3

我们可以将原来系统生成的BoundField利用在编辑列对话框里面将他们转换为TemplateField,这样做的好处是,我们可以随时利用编辑模板功能,到里面再进行修改,随意转换成为另外的web控件。

举个例子,我们将编辑按钮设成teplatefield之后,编辑模板,将该button的OnClientClick属性设置为return confirm('确定编辑?') ,就可以添加确认功能。

尝试做一个员工详细信息页面吧,从员工列表页面链接过去。
在ASP时代,通过ClerkDetail.asp?clerkid=xxx的方式链接,在ClerkDetail里面打开select语句,用各个字段值填充各个变量,再以表格形式显示出来。非常简单,但是遇到数据表字段比较多的时候,手工编码量会增大而且容易出错。我们看看在ASP.NET2.0里面应该怎么做。

转载于:https://www.cnblogs.com/hulu/archive/2007/06/30/801039.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值