[原创]WinForm的DataGrid动态装载控件

来源:互联网 发布:2017重庆网络知识竞赛 编辑:程序博客网 时间:2024/06/13 04:30
做个项目,需要在DataGrid中动态加载CheckBox控件,偶是初学菜鸟,WebForm倒知道用模板列,到了Winform就蒙了于是在网上到处找关于Winform的模板列,然后逐渐认识DataGridTableStyle、ColumnStyle……由于本人资质平庸,花了大半天的时间有点了眉目,以下全属经验总结,请大家不要笑偶,不过欢迎批评指正……

我用偶认为最简单的方法做偶的经验总结,其实加载控件有N多种方法,偶列出两种共大家选择,简单易懂:
第一种:
            WindowsDisplayBLL myWdb=new WindowsDisplayBLL();
            DataTable myDt=myWdb.DisplayMedicamentDataSet.Tables[0];//把DataSet里要用到的表放到myDt表里便于操作
      
             //创建个CheckBox列,HeaderText为"选择",类型为Boolean,默认值为false,然后添加到myDt表
             //这样定义就是保证在显示DataGrid时可以与数据同时显示,而不是你用鼠标点击一下才会显示
            DataColumn dcCheck=new DataColumn("选择");
            dcCheck.DataType=Type.GetType("System.Boolean");
            dcCheck.DefaultValue=false;
            myDt.Columns.Add(dcCheck);

             //这会表里本来有5个字段,加上这个新加入的CheckBox就变成6个字段了,根据字段个数决定DataGridTableStyle的定义个数,这样保证你表中所有的字段都会完全显示

            //加DataGridTableStyle,注意与Table的对应关系!
            DataGridTableStyle dgStyle=new DataGridTableStyle();
            dgStyle.MappingName=myDt.TableName;
           
            DataGridColumnStyle dg_id=new DataGridTextBoxColumn();
            dg_id.MappingName="m_id";
            dg_id.HeaderText="编号";
            dg_id.Width=50;
            DataGridColumnStyle dg_type=new DataGridTextBoxColumn();
            dg_type.MappingName="m_type";
            dg_type.HeaderText="类型";
            dg_type.Width=100;
            DataGridColumnStyle dg_name=new DataGridTextBoxColumn();
            dg_name.MappingName="m_name";
            dg_name.HeaderText="名称";
            dg_id.Width=60;
            DataGridColumnStyle dg_qid=new DataGridTextBoxColumn();
            dg_qid.MappingName="m_qid";
            dg_qid.HeaderText="计量ID";
            dg_qid.Width=60;
            DataGridColumnStyle dg_unit=new DataGridTextBoxColumn();
            dg_unit.MappingName="m_unit";
            dg_unit.HeaderText="计量单位ID";
            dg_unit.Width=50;

            DataGridColumnStyle dg_bool=new DataGridBoolColumn();//此处定义的Bool型就是CheckBox的位置
            dg_bool.MappingName="选择";
            dg_bool.HeaderText="布尔值";
            dg_bool.Width=50;
           
            DataGridColumnStyle[] dgColumn=new   DataGridColumnStyle[6]{dg_id,dg_type,dg_name,dg_qid,dg_unit,dg_bool};//这里的dgColumn数量是和以上定义的DataGridColumnStyle对应的
            dgStyle.GridColumnStyles.AddRange(dgColumn);
            dgMedicamentList.TableStyles.Add(dgStyle);

            dgMedicamentList.DataSource=myDt;

第二种:
            WindowsDisplayBLL myWdb=new WindowsDisplayBLL();
           
            DataTable myDt=myWdb.DisplayMedicamentDataSet.Tables[0];

             //偶把这里注释了,因为这是第一种的方法,其余的全一样!!
//            DataColumn dcCheck=new DataColumn("选择");
//            dcCheck.DataType=Type.GetType("System.String");
//            dcCheck.DefaultValue="Button";
//            myDt.Columns.Add(dcCheck);
           

            //加DataGridTableStyle,注意与Table的对应关系!
            DataGridTableStyle dgStyle=new DataGridTableStyle();
            dgStyle.MappingName=myDt.TableName;
           
            DataGridColumnStyle dg_id=new DataGridTextBoxColumn();
            dg_id.MappingName="m_id";
            dg_id.HeaderText="编号";
            dg_id.Width=50;
            DataGridColumnStyle dg_type=new DataGridTextBoxColumn();
            dg_type.MappingName="m_type";
            dg_type.HeaderText="类型";
            dg_type.Width=100;
            DataGridColumnStyle dg_name=new DataGridTextBoxColumn();
            dg_name.MappingName="m_name";
            dg_name.HeaderText="名称";
            dg_id.Width=60;
            DataGridColumnStyle dg_qid=new DataGridTextBoxColumn();
            dg_qid.MappingName="m_qid";
            dg_qid.HeaderText="计量ID";
            dg_qid.Width=60;
            DataGridColumnStyle dg_unit=new DataGridTextBoxColumn();
            dg_unit.MappingName="m_unit";
            dg_unit.HeaderText="计量单位ID";
            dg_unit.Width=50;
            DataGridColumnStyle dg_bool=new DataGridTextBoxColumn();
            dg_bool.MappingName="选择";
            dg_bool.HeaderText="Button";
            dg_bool.Width=50;
           
            DataGridColumnStyle[] dgColumn=new DataGridColumnStyle[6]{dg_id,dg_type,dg_name,dg_qid,dg_unit,dg_bool};
            dgStyle.GridColumnStyles.AddRange(dgColumn);
            dgMedicamentList.TableStyles.Add(dgStyle);

            dgMedicamentList.DataSource=myDt;

          //这里是第二种方法的精华啊!!区别第一种方法,这种方法就是你要用鼠标点击一下才显示哦
            DataGridTextBoxColumn dgtbc=(DataGridTextBoxColumn)dgMedicamentList.TableStyles[0].GridColumnStyles[0];//这里定义的列号
            CheckBox mycb=new CheckBox();
            mycb.Dock=DockStyle.Fill;
            mycb.Text="";
            dgtbc.TextBox.Controls.Add(mycb);
原创粉丝点击