题外话:微软不厚道,vs2005的很多控件属性框里面,如果要输入中文,有时只能用(或者先用)微软拼音,什么搜狗紫光统统不行。。。
GridView控件的CommandField支持“编辑,更新,取消”,选取和删除三种命令,而DetailsView控件支持“编辑更新取消”,删除和“添加插入取消”三种命令。
我尝试不用GridView智能标签的启用编辑,启用删除,而是编辑列,添加相应的CommandField。
不过我发现添加三个CommandField命令字段后,智能标签上的启用编辑,启用删除,和启用选定内容已经自动打钩了。
为了避免数据误删或者限制删除权限,需要修改GridView的RowDeleting事件:
 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
 {
    {
 e.Cancel = true;
        e.Cancel = true;
 Literal txtMsg = new Literal();
        Literal txtMsg = new Literal();
 txtMsg.Text = "<script>alert('数据删除取消');</script>";
        txtMsg.Text = "<script>alert('数据删除取消');</script>";
 Page.Controls.Add(txtMsg);
        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设成"自定义一"。运行效果如下:
    
        
如果我们想把部门编号=1的记录前景色设为红色,那么就修改GridView的RowDataBound事件:
 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
 {
    {
 //测试作为参数传入的行类型是否是DataRow 而不是标题,页脚或者其他。
        //测试作为参数传入的行类型是否是DataRow 而不是标题,页脚或者其他。
 if (e.Row.RowType == DataControlRowType.DataRow)
        if (e.Row.RowType == DataControlRowType.DataRow)
 {
        {
 //部门编号是第4个单元格,位移为3
            //部门编号是第4个单元格,位移为3
 TableCell cell = e.Row.Cells[3];
            TableCell cell = e.Row.Cells[3];
 if (cell.Text.ToUpper() == "1")
            if (cell.Text.ToUpper() == "1")
 {
            {
 cell.ForeColor = System.Drawing.Color.Red;
                cell.ForeColor = System.Drawing.Color.Red;
 }
            }
 }
        }
 }
    }
显示结果如下:
    
        
好像不是我预期的整个行的前景色都变红,只是修改了部门编号所在的单元格。要一行的文字都变红,只需要改一行:
 //cell.ForeColor = System.Drawing.Color.Red;
                //cell.ForeColor = System.Drawing.Color.Red;
 e.Row.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。
页面运行结果如下:
    
        
我们可以将原来系统生成的BoundField利用在编辑列对话框里面将他们转换为TemplateField,这样做的好处是,我们可以随时利用编辑模板功能,到里面再进行修改,随意转换成为另外的web控件。
举个例子,我们将编辑按钮设成teplatefield之后,编辑模板,将该button的OnClientClick属性设置为return confirm('确定编辑?') ,就可以添加确认功能。
尝试做一个员工详细信息页面吧,从员工列表页面链接过去。
在ASP时代,通过ClerkDetail.asp?clerkid=xxx的方式链接,在ClerkDetail里面打开select语句,用各个字段值填充各个变量,再以表格形式显示出来。非常简单,但是遇到数据表字段比较多的时候,手工编码量会增大而且容易出错。我们看看在ASP.NET2.0里面应该怎么做。
GridView控件的CommandField支持“编辑,更新,取消”,选取和删除三种命令,而DetailsView控件支持“编辑更新取消”,删除和“添加插入取消”三种命令。
我尝试不用GridView智能标签的启用编辑,启用删除,而是编辑列,添加相应的CommandField。
不过我发现添加三个CommandField命令字段后,智能标签上的启用编辑,启用删除,和启用选定内容已经自动打钩了。
为了避免数据误删或者限制删除权限,需要修改GridView的RowDeleting事件:
 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) {
    { e.Cancel = true;
        e.Cancel = true; Literal txtMsg = new Literal();
        Literal txtMsg = new Literal(); txtMsg.Text = "<script>alert('数据删除取消');</script>";
        txtMsg.Text = "<script>alert('数据删除取消');</script>"; Page.Controls.Add(txtMsg);
        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)
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {
    { //测试作为参数传入的行类型是否是DataRow 而不是标题,页脚或者其他。
        //测试作为参数传入的行类型是否是DataRow 而不是标题,页脚或者其他。 if (e.Row.RowType == DataControlRowType.DataRow)
        if (e.Row.RowType == DataControlRowType.DataRow) {
        { //部门编号是第4个单元格,位移为3
            //部门编号是第4个单元格,位移为3 TableCell cell = e.Row.Cells[3];
            TableCell cell = e.Row.Cells[3]; if (cell.Text.ToUpper() == "1")
            if (cell.Text.ToUpper() == "1") {
            { cell.ForeColor = System.Drawing.Color.Red;
                cell.ForeColor = System.Drawing.Color.Red; }
            } }
        } }
    }显示结果如下:
| 员工编号 | 姓名 | 工号 | 部门编号 | 按钮字段一 | 按钮字段二 | 自定义一 | 自定义二 | 
|---|---|---|---|---|---|---|---|
| 0001 | 陈公客 | 1001 | 1 | ||||
| 0002 | 王公客 | 1002 | 1 | ||||
| 0003 | 张大客 | 3001 | 3 | ||||
| 0004 | 李大客 | 3002 | 3 | 
好像不是我预期的整个行的前景色都变红,只是修改了部门编号所在的单元格。要一行的文字都变红,只需要改一行:
 //cell.ForeColor = System.Drawing.Color.Red;
                //cell.ForeColor = System.Drawing.Color.Red; e.Row.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里面应该怎么做。
 
                     
                    
                 
                    
                 
                
 
 
         
    
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号