首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网页制作-> HTML教程
为DataGrid添加自定义DataGridColumn类的例子-.NET教程,Asp.Net开发
作者:网友供稿 点击:0
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 


datagrid的模板列可以方便的定制所需要的样式,比如上图:
在编辑状态的时候学院是下拉框,选择了当前的学院,但是如果学院很多,下拉框会很长,找起来也会很麻烦,所以可能需要再增加一个查找的功能。这样一个列完全可以通过模板列来实现,可是如果项目中有很多这样的需求,添加这么多复杂的模板列一来很麻烦,二来也有代码冗余,没有重用性,为此,我们可以尝试定制自己的datagridcolumn(类似已经存在的hyperlinkcolumn)来为这个列进行小小的封装。

先建立一个类文件:
using system;
using system.data;
using system.web.ui;
using system.web.ui.webcontrols;

namespace csdn
{
    
public class mycolumn:datagridcolumn
    
{
        
public string datatextfield;
        
public string datavaluefield;
        
public datatable datasource;
                        
        
public override void initializecell(tablecell cell,int columnindex,listitemtype itemtype)
        
{
            
base.initializecell(cell,columnindex,itemtype);
            
switch(itemtype)
            
{
                
case listitemtype.header:
                    cell.text
=this.headertext;
                    
break;
                
case listitemtype.item:case listitemtype.alternatingitem:
                    cell.databinding
+=new eventhandler(this.cell_itemdatabinding);
                    
break;
                
case listitemtype.edititem:
                    cell.databinding 
+=new eventhandler(cell_edititemdatabinding);
                    dropdownlist ddl
=new dropdownlist();
                    cell.controls.add(ddl);
                    textbox t
=new textbox();
                    t.width
=80;
                    cell.controls.add(t);
                    button b
=new button();
                    b.text
="查找";
                    b.click
+=new eventhandler(this.btn_click);
                    cell.controls.add(b);
                    
break;
            }

        }


        
private void cell_itemdatabinding(object sender, eventargs e)
        
{
            tablecell cell
=(tablecell)sender;
            datagriditem dgi
=(datagriditem)cell.namingcontainer;
            cell.text
=(databinder.eval(dgi.dataitem,this.datatextfield)).tostring();
        }


        
private void cell_edititemdatabinding(object sender,eventargs e)
        
{
            tablecell cell
=(tablecell)sender;
            dropdownlist ddl
=(dropdownlist)cell.controls[0];
            datagriditem dgi
=(datagriditem)cell.namingcontainer;
            
for(int i=0;i<this.datasource.rows.count;i++)
                ddl.items.add(
new listitem(this.datasource.rows[i][this.datatextfield].tostring(),this.datasource.rows[i][this.datavaluefield].tostring()));
            ddl.items.findbyvalue((databinder.eval(dgi.dataitem,
this.datavaluefield)).tostring()).selected=true;
        }


        
private void btn_click(object sender,eventargs e)
        
{
            tablecell cell
=(tablecell)(((button)sender).parent);
            dropdownlist ddl
=(dropdownlist)cell.controls[0];
            textbox t
=(textbox)cell.controls[1];
            datagriditem dgi
=(datagriditem)cell.namingcontainer;
            listitem li
=ddl.items.findbytext(t.text);
            
if(li!=null)
            
{
                ddl.selectedindex
=-1;
                li.selected
=true;
            }

        }

    }

}


然后为页面添加这个自定义列:
<%@ page language="c#" codebehind="webform67.aspx.cs" autoeventwireup="false" inherits="csdn.webform67" %>
<%@ register tagprefix="mydatagridcolumn" assembly="csdn" namespace="csdn"%>
<!doctype html public "-//w3c//dtd html 4.0 transitional//en" >
<html>
    
<head>
        
<title>test</title>
        
<meta http-equiv="content-type" content="text/html; charset=gb2312">
        
<meta content="microsoft visual studio .net 7.1" name="generator">
        
<meta content="c#" name="code_language">
        
<meta content="javascript" name="vs_defaultclientscript">
        
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetschema">
        
<link href="css.css" type="text/css" rel="stylesheet">
    
</head>
    
<body>
        
<form id="form1" method="post" runat="server">
            
<asp:datagrid id="datagrid1" runat="server" datakeyfield="stuid" cellspacing="1" borderwidth="0px"
                oneditcommand
="edit" oncancelcommand="cancel" onupdatecommand="update" cellpadding="5" cssclass="border"
                autogeneratecolumns
="false">
                
<itemstyle cssclass="item"></itemstyle>
                
<headerstyle cssclass="header"></headerstyle>
                
<columns>
                    
<asp:boundcolumn headertext="姓名" datafield="stuname"></asp:boundcolumn>
                    
<mydatagridcolumn:mycolumn headertext="学院" datatextfield="depname" datavaluefield="depid"></mydatagridcolumn:mycolumn>
                    
<asp:editcommandcolumn buttontype="pushbutton" updatetext="更新" canceltext="取消" edittext="编辑"></asp:editcommandcolumn>
                
</columns>
            
</asp:datagrid>
        
</form>
    
</body>
</html>

后台代码如下:
using system;
using system.collections;
using system.componentmodel;
using system.data;
using system.data.sqlclient;
using system.drawing;
using system.web;
using system.web.sessionstate;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.htmlcontrols;

namespace csdn
{
    
/// <summary>
    
/// webform67 的摘要说明。
    
/// </summary>

    public class webform67 : system.web.ui.page
    
{
        
protected system.web.ui.webcontrols.datagrid datagrid1;
        
        
private void page_load(object sender, system.eventargs e)
        
{
            
// 在此处放置用户代码以初始化页面
            if(!ispostback)
            
{
                setbind();
            }
            
        }


        
protected void setbind()
        
{
            sqlconnection conn
=new sqlconnection(system.configuration.configurationsettings.appsettings["conn"]);
            sqldataadapter da
=new sqldataadapter("select * from stu,dep where stu.studepid=dep.depid",conn);
            dataset ds
=new dataset();
            da.fill(ds);
            
this.datagrid1.datasource=ds.tables[0];
            
this.datagrid1.databind();            
        }


        
protected void edit(object sender,datagridcommandeventargs e)
        
{
            
this.datagrid1.edititemindex=e.item.itemindex;
            setbind();
            
        }


        
protected void cancel(object sender,datagridcommandeventargs e)
        
{
            
this.datagrid1.edititemindex=-1;
            setbind();
        }


        
protected void update(object sender,datagridcommandeventargs e)
        
{
            
if(e.item.itemtype==listitemtype.edititem)
            
{
                sqlconnection conn
=new sqlconnection(system.configuration.configurationsettings.appsettings["conn"]);
                sqlcommand comm
=new sqlcommand("update stu set stuname=@name,studepid=@depid where stuid=@id",conn);
                sqlparameter parm1
=new sqlparameter("@name",sqldbtype.nvarchar,50);
                parm1.value
=((textbox)e.item.cells[0].controls[0]).text;
                sqlparameter parm2
=new sqlparameter("@depid",sqldbtype.int);
                parm2.value
=((dropdownlist)e.item.cells[1].controls[0]).selectedvalue;
                sqlparameter parm3
=new sqlparameter("@id",sqldbtype.int);
                parm3.value
=this.datagrid1.datakeys[e.item.itemindex];
                comm.parameters.add(parm1);
                comm.parameters.add(parm2);
                comm.parameters.add(parm3);
                conn.open();
                comm.executenonquery();
                conn.close();
                
this.datagrid1.edititemindex=-1;
                setbind();
            }

        }


        
#region web 窗体设计器生成的代码
        
override protected void oninit(eventargs e)
        
{
            
//
            
// codegen: 该调用是 asp.net web 窗体设计器所必需的。
            
//
            initializecomponent();
            
base.oninit(e);
        }

        
        
/// <summary>
        
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
        
/// 此方法的内容。
        
/// </summary>

        private void initializecomponent()
        
{    
            
this.datagrid1.itemdatabound += new system.web.ui.webcontrols.datagriditemeventhandler(this.datagrid1_itemdatabound);
            
this.load += new system.eventhandler(this.page_load);

        }

        
#endregion


        
private void datagrid1_itemdatabound(object sender, system.web.ui.webcontrols.datagriditemeventargs e)
        
{
            sqlconnection conn
=new sqlconnection(system.configuration.configurationsettings.appsettings["conn"]);
            sqldataadapter da
=new sqldataadapter("select * from dep",conn);
            dataset ds
=new dataset();
            da.fill(ds);
            ((mycolumn)
this.datagrid1.columns[1]).datasource=ds.tables[0];
        }

    }

}


这个例子可能稍微复杂了点(列中放了3个控件),但是原理比较简单,其实简化一下,我们可以封装自己的dropdownlistcolumn、checkboxcolumn等单控件列。

文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·C#时间函数扩展-.NET教程,C#语言
·成人影片女明星jameson推出手机情色铃声服务
·窗体中控件自动随窗体变化大小-.NET教程,组件控件开发
·C#使用CDO发送邮件-.NET教程,C#语言
·浅析nat的类型
·我的字符和文件加密类,128位加密-.NET教程,评论及其它
·数字机顶盒技术综述 (一)
·数字多媒体广播平台及其关键技术
·java 线程安全-JSP教程,Java技巧及代码
·Remoting和Web服务的区别-.NET教程,Web Service开发
最新文章
·如何通过博客月赚几万美金?_网赚技巧
·浅析广告联盟与个人网站的盈利_网赚技巧
·google adsense会议的主要内容回顾_网赚技巧
·赵克:创业基本素质勤奋专业低调务实_站长访谈
·行业网站分析之一:行业网站现状与前景_站长心得
·分享:做网站月入7000的网站赚钱经验_站长心得
·首页所应该达到的几个目标(2)_站长心得
·google sandbox效应_google推广
·google旧瓶装新酒 用遗弃技术开发web新应用_google推广
·认识google优化排名_google推广
相关主题
  • 为DataGrid自定义分页添加自定义导航和分页信息-.NET教程,数据库应用
  • 为DataGrid列添加Radio(单选框)列-.NET教程,数据库应用
  • 为DataGrid添加确认删除的对话框-.NET教程,数据库应用
  • 为DataGrid添加自动编号功能-.NET教程,数据库应用
  • 为DataGrid添加CheckBox控件-.NET教程,组件控件开发
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭