在winfrom下,如何把checkBOX添加到DATAGRID中!!

解决方案 »

  1.   

    //初始化DataGrid 
       private void PopulateGrid() 
       { 
        //创建一个DataTable对象,包括四列,前三列为String,最后一列为Boolean。 
        dtblFunctionalArea = new DataTable ("FunctionArea"); 
        string[] arrstrFunctionalArea = new string [3]{"Functional Area","Min","Max"}; 
        DataColumn dtCol = null; 
        //创建String列 
        for(int i=0; i< 3;i++) 
        { 
         dtCol = new DataColumn(arrstrFunctionalArea[i]); 
         dtCol.DataType = Type.GetType("System.String"); 
         dtCol.DefaultValue = ""; 
         dtblFunctionalArea.Columns.Add(dtCol); 
        }     //创建Boolean列,用CheckedBox来显示。 
        DataColumn dtcCheck = new DataColumn("IsMandatory"); 
        dtcCheck.DataType = System.Type.GetType("System.Boolean"); 
        dtcCheck.DefaultValue = false; 
        dtblFunctionalArea.Columns.Add(dtcCheck);     //把表绑定到DataGrid 
        dgdFunctionArea.DataSource = dtblFunctionalArea;     //为DataGrid加载DataGridTableStyle样式 
        if(!dgdFunctionArea.TableStyles.Contains("FunctionArea")) 
        { 
         DataGridTableStyle dgdtblStyle = new DataGridTableStyle(); 
         dgdtblStyle.MappingName = dtblFunctionalArea.TableName; 
         dgdFunctionArea.TableStyles.Add(dgdtblStyle); 
         dgdtblStyle.RowHeadersVisible = false; 
         dgdtblStyle.HeaderBackColor = Color.LightSteelBlue; 
         dgdtblStyle.AllowSorting = false; 
         dgdtblStyle.HeaderBackColor = Color.FromArgb(8,36,107); 
         dgdtblStyle.RowHeadersVisible = false; 
         dgdtblStyle.HeaderForeColor = Color.White; 
         dgdtblStyle.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 9F, 
         System.Drawing.FontStyle.Bold, 
         System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); 
         dgdtblStyle.GridLineColor = Color.DarkGray; 
         dgdtblStyle.PreferredRowHeight = 22; 
         dgdFunctionArea.BackgroundColor = Color.White;      //设置列的宽度 
         GridColumnStylesCollection colStyle = dgdFunctionArea.TableStyles[0].GridColumnStyles; 
         colStyle[0].Width = 100; 
         colStyle[1].Width = 50; 
         colStyle[2].Width = 50; 
         colStyle[3].Width = 80; 
        }     DataGridTextBoxColumn dgtb = (DataGridTextBoxColumn)dgdFunctionArea.TableStyles[0].GridColumnStyles[0];     ComboBox cmbFunctionArea = new ComboBox(); 
        cmbFunctionArea.Items.AddRange(new object[]{"选项一","选项二","选项三"}); 
        cmbFunctionArea.Cursor = Cursors.Arrow; 
        cmbFunctionArea.DropDownStyle= ComboBoxStyle.DropDownList; 
        cmbFunctionArea.Dock = DockStyle.Fill;     //在选定项发生更改并且提交了该更改后发生     cmbFunctionArea.SelectionChangeCommitted += new  EventHandler(cmbFunctionArea_SelectionChangeCommitted);     //把ComboBox添加到DataGridTableStyle的第一列     dgtb.TextBox.Controls.Add(cmbFunctionArea);    }    //设置焦点模拟    private void GetFocus(int row,int col) 
       { 
        //先把焦点移动到DataGrid 
        this.dgdFunctionArea.Focus(); 
        //把焦点移动到DataGridCell 
        DataGridCell dgc = new DataGridCell(row,col); 
        this.dgdFunctionArea.CurrentCell = dgc; 
        DataGridTextBoxColumn dgtb = (DataGridTextBoxColumn)dgdFunctionArea.TableStyles[0].GridColumnStyles[col];     //设置焦点     dgtb.TextBox.Focus(); 
       }    //把Combobox上修改的数据提交到当前的网格   private void cmbFunctionArea_SelectionChangeCommitted(object sender, EventArgs e) 
      { 
       this.dgdFunctionArea[this.dgdFunctionArea.CurrentCell] = ((ComboBox)sender).SelectedItem.ToString();   }   //设置新的焦点   private void buttonFocus_Click(object sender, System.EventArgs e) 
      { 
       //焦点模拟,这里设置第三行第一列 
       GetFocus(2,0); 
      }
      

  2.   

    有很多可以参考的文章:http://www.codeproject.com/cs/miscctrl/noogenwinforms.asp
    http://www.codeproject.com/useritems/Control_DataGrid.asp