首页 > 开发 > 综合 > 正文

用代码创建DataGrid的多链接及checkbox事件响应

2024-07-21 02:29:15
字体:
来源:转载
供稿:网友

  本例用代码实现了创建datagrid并响应了checkbox事件,并实现了超链接列的多变量传送。

  创建一个前台页面

createdatagrid.aspx:

  在form中添加一个plcaeholder,id为"ph",runat="server"

  后台页面

createdatagrid.aspx.cs

    public class createdatagrid : system.web.ui.page
    {
        public string sql = "select firstname,lastname,homephone,title from employees";
        public datagrid mygrid = new datagrid();
        protected system.web.ui.webcontrols.placeholder ph;
        public string sortexpression;
        private void page_load(object sender, system.eventargs e)
        {
              //createdatagridform.controls.add(makegrid());
           
            this.ph.controls.add(makegrid());
        }
//        protected override void createchildcontrols()
//        {
           
            //base.createchildcontrols ();
        //}

        #region web 窗体设计器生成的代码
        override protected void oninit(eventargs e)
        {
            //
            // codegen: 该调用是 asp.net web 窗体设计器所必需的。
            //
            initializecomponent();
            base.oninit(e);
        }
       
        /// <summary>
        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
        /// 此方法的内容。
        /// </summary>
        private void initializecomponent()
        {   
            this.load += new system.eventhandler(this.page_load);

        }
        #endregion
        /// <summary>
        /// 创建一个模板列和一个列模板
        /// </summary>

        public templatecolumn tm = new templatecolumn();
        public columntemplate mycol = new columntemplate();

        //返回dataview
        public dataview createdatasource ()
        {
            string strsql;
            strsql = "data source=localhost;initial catalog=northwind;user id=sa;password=sa;";
            sqlconnection conn = new sqlconnection(strsql);
            sqldataadapter db_sqladaptor = new sqldataadapter(sql,conn);
            dataset ds = new dataset();
            db_sqladaptor.fill(ds,"employees");
            dataview myview = ds.tables["employees"].defaultview;
            //myview.sort=sortexpression;
            //response.write(sql);
            return myview;
        }

        /// <summary>
        /// 处理排序
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void sort_grid(object sender, datagridsortcommandeventargs e)
        {
            sortexpression = e.sortexpression.tostring();
            session["sortfield"]=sortexpression.trim();
            if(session["order"]==null) session["order"] = "asc";
            session["order"] = (session["order"].tostring()=="desc")?"asc":"desc";
            if(session["sortfield"]==null) session["sortfield"] = "firstname";
            sql += " order by "+session["sortfield"].tostring() + " " + session["order"].tostring();
            mygrid.datasource = createdatasource();
            mygrid.databind();
        }
        /// <summary>
        /// 创建和设置datagrid属性,这里的属性设置为固定值,但也可以动态设置
        /// </summary>
        /// <returns></returns>

        public datagrid makegrid()
        {
            mygrid.cellpadding=2;
            mygrid.attributes.add("align","center");
            mygrid.cellspacing=0;
            mygrid.width=500;
            mygrid.borderwidth=1;
            mygrid.bordercolor=colortranslator.fromhtml("black");
            mygrid.autogeneratecolumns=false;
            mygrid.forecolor=colortranslator.fromhtml("black");
            mygrid.font.size=9;
            mygrid.font.name="宋体";
            mygrid.allowsorting=true;

            ///sort命令的事件处理器

            //mygrid.sortcommand += new datagridsortcommandeventhandler(sort_grid);
            mygrid.itemdatabound +=new datagriditemeventhandler(mygrid_itemdatabound);

            ///设置headerstyle
            mygrid.headerstyle.backcolor=colortranslator.fromhtml("gold");
            mygrid.headerstyle.forecolor=colortranslator.fromhtml("black");
            mygrid.headerstyle.font.name="宋体";
            mygrid.headerstyle.font.size=9;
            mygrid.headerstyle.font.bold=true;
            mygrid.headerstyle.horizontalalign=horizontalalign.center;

            ///设置alternating style
            mygrid.alternatingitemstyle.backcolor=colortranslator.fromhtml("silver");
            mygrid.alternatingitemstyle.forecolor=colortranslator.fromhtml("black");

            ///设置itemstyle
            mygrid.itemstyle.horizontalalign=horizontalalign.left;

            ///创建绑定列和属性

            hyperlinkcolumn firstname = new hyperlinkcolumn();
            boundcolumn lastname = new boundcolumn();
            boundcolumn homephone = new boundcolumn();
            boundcolumn title = new boundcolumn();

//            firstname.headertext="名字";
//            firstname.datafield="firstname";
//            firstname.sortexpression="firstname";

            firstname.headertext="名字";
           
            firstname.datatextfield ="firstname";
            firstname.sortexpression="firstname";
            firstname.navigateurl = "http://localhost/test.aspx";

            lastname.headertext="姓";
            lastname.datafield="lastname";
            lastname.sortexpression="lastname";

            homephone.headertext="电话";
            homephone.datafield="homephone";
            homephone.sortexpression="homephone";

            title.headertext="职务";
            title.datafield="title";
            title.sortexpression="title";

            mygrid.columns.addat(0, firstname);
            mygrid.columns.addat(1, lastname);
            mygrid.columns.addat(2, homephone);
            mygrid.columns.addat(3, title);

            ///设置模板列属性和itemstyle模板
            tm.headertext="**删除信息**";
            tm.headerstyle.horizontalalign=horizontalalign.center;
            tm.itemstyle.backcolor = colortranslator.fromhtml("#fff778");
            tm.itemstyle.horizontalalign=horizontalalign.center;
           

            templatecolumn aa=new templatecolumn();
            columntemplate1 tt = new columntemplate1();
            aa.itemtemplate = tt;

           
            ///创建列模板。
            ///列模板从itemplate继承
            tm.itemtemplate = mycol;
            mygrid.columns.addat(4, tm);
            mygrid.columns.addat(5,aa); 

            ///绑定和返回
            mygrid.datasource = createdatasource();
            mygrid.databind();
            return mygrid;
        }

        private void mygrid_itemdatabound(object sender, datagriditemeventargs e)
        {
            if(e.item.itemtype == listitemtype.item || e.item.itemtype == listitemtype.alternatingitem)
            {
                hyperlink link  = (hyperlink)e.item.cells[0].controls[0]; 
                string url = link.navigateurl;
    //实现多参数链接
                url += "?id=" + e.item.cells[1].text + "&id2=" + e.item.cells[2].text;
                link.navigateurl = url;
            }
        }
    }
 
 
  再添加关键的几段

///  columntemplate 从itemplate继承。
    ///  "instantiatein"定义子控件的属于谁

    public class columntemplate : itemplate
    {

        public void instantiatein(control container)
        {
            label mylabel = new label();
            mylabel.text="点击删除";
            checkbox mycheckbox = new checkbox();
            container.controls.add(mylabel);
            container.controls.add(mycheckbox);
        }

    } 

添加checkbox事件:

public class columntemplate1 : itemplate
    {

        public void instantiatein(control container)
        {
            label mylabel = new label();
            mylabel.text="test";
            checkbox lnk = new checkbox();
            lnk.autopostback = true;
            lnk.checkedchanged +=new eventhandler(lnk_checkedchanged);
            container.controls.add(mylabel);
            container.controls.add(lnk);
        }


        private void lnk_checkedchanged(object sender, eventargs e)
        {
            checkbox lnk = (checkbox)sender;
            datagrid dg = (datagrid)lnk.namingcontainer.namingcontainer;
            if(dg == null) return;
             //实现checkbox事件响应
            datagriditem di =(datagriditem)lnk.namingcontainer;
            hyperlink lnkid= (hyperlink)di.cells[0].controls[0];
            string s2 =  lnkid.text.trim()+lnk.id+"被选中了!";
        }
    }



发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表