国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

為DataGrid添加自定義DataGridColumn類的例子

2024-07-21 02:15:47
字體:
供稿:網(wǎng)友
,歡迎訪問網(wǎng)頁設(shè)計(jì)愛好者web開發(fā)。

datagrid的模板列可以方便的定制所需要的樣式,比如上圖:
在編輯狀態(tài)的時(shí)候?qū)W院是下拉框,選擇了當(dāng)前的學(xué)院,但是如果學(xué)院很多,下拉框會(huì)很長(zhǎng),找起來也會(huì)很麻煩,所以可能需要再增加一個(gè)查找的功能。這樣一個(gè)列完全可以通過模板列來實(shí)現(xiàn),可是如果項(xiàng)目中有很多這樣的需求,添加這么多復(fù)雜的模板列一來很麻煩,二來也有代碼冗余,沒有重用性,為此,我們可以嘗試定制自己的datagridcolumn(類似已經(jīng)存在的hyperlinkcolumn)來為這個(gè)列進(jìn)行小小的封裝。

先建立一個(gè)類文件:
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;
            }
        }
    }
}

然后為頁面添加這個(gè)自定義列:
<%@ 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="學(xué)院" datatextfield="depname" datavaluefield="depid"></mydatagridcolumn:mycolumn>
                    <asp:editcommandcolumn buttontype="pushbutton" updatetext="更新" canceltext="取消" edittext="編輯"></asp:editcommandcolumn>
                </columns>
            </asp:datagrid>
        </form>
    </body>
</html>

后臺(tái)代碼如下:
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 [email protected],[email protected] where [email protected]",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();
            }
        }

        web 窗體設(shè)計(jì)器生成的代碼#region web 窗體設(shè)計(jì)器生成的代碼
        override protected void oninit(eventargs e)
        {
            //
            // codegen: 該調(diào)用是 asp.net web 窗體設(shè)計(jì)器所必需的。
            //
            initializecomponent();
            base.oninit(e);
        }
        
        /**//// <summary>
        /// 設(shè)計(jì)器支持所需的方法 - 不要使用代碼編輯器修改
        /// 此方法的內(nèi)容。
        /// </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];
        }
    }
}

這個(gè)例子可能稍微復(fù)雜了點(diǎn)(列中放了3個(gè)控件),但是原理比較簡(jiǎn)單,其實(shí)簡(jiǎn)化一下,我們可以封裝自己的dropdownlistcolumn、checkboxcolumn等單控件列。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 饶河县| 纳雍县| 潞西市| 通城县| 嵊泗县| 丰原市| 区。| 花莲县| 修水县| 龙口市| 金寨县| 遂昌县| 阿拉善右旗| 九寨沟县| 蒙山县| 永春县| 固原市| 明光市| 普格县| 平谷区| 松阳县| 辽阳县| 石屏县| 金寨县| 九台市| 常德市| 塔城市| 克什克腾旗| 布拖县| 荆门市| 肇源县| 永宁县| 福泉市| 海兴县| 大田县| 巩留县| 淅川县| 安多县| 罗甸县| 开封县| 梁山县|