zoukankan      html  css  js  c++  java
  • 6/29 原型编码阶段:(3) CommandField,TemplateField

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

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

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

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

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

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

            }

        }

     显示结果如下:
    员工编号 姓名 工号 部门编号 按钮字段一  按钮字段二  自定义一 自定义二
    0001 陈公客 1001 1    
    0002 王公客 1002 1    
    0003 张大客 3001 3    
    0004 李大客 3002 3    

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

    如果点击双向数据绑定,表达式就变成: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里面应该怎么做。
  • 相关阅读:
    webpack的安装与配置
    npm初始化
    gitignore的配置
    git本地已有文件夹和远程仓库对应
    git 配置
    开发环境和开发工具
    git 码云使用教程
    递归
    LeetCode 392. 判断子序列
    MongoDB基本操作
  • 原文地址:https://www.cnblogs.com/hulu/p/801039.html
Copyright © 2011-2022 走看看