我做了一个继承控件继承了DataGridView,但是在界面应用的时候我进行编辑列和选择数据源的时候抛出异常,更甚者把vs都关掉了。
我是不是有什么事情没做?
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using EFTMIS.ExtendedControl;
using System.Windows.Forms;namespace EFTMIS.ProductUI.Common
{
    public partial class UserDataGridView : EFTMIS.ExtendedControl.DataGridView//这个也是继承的DataGridView。公司写的封装控件
    {
        private int BindColumIndex = 0;
        private bool isAddCheckBoxColumn = false;
        public UserDataGridView()
        {
            InitDataGridViewList();
            InitializeComponent();
        }
        public UserDataGridView(bool isAddCheckBoxColumn)
            : this()
        {
            this.isAddCheckBoxColumn = isAddCheckBoxColumn;
        }        public UserDataGridView(IContainer container)
        {
            container.Add(this);
            InitDataGridViewList();
            InitializeComponent();
        }        protected override void OnDataBindingComplete(DataGridViewBindingCompleteEventArgs e)
        {            base.OnDataBindingComplete(e);
        }
        /// <summary>
        /// 设置头部背景颜色
        /// </summary>
        /// <param name="color"></param>
        private void SetHeaderColor(System.Drawing.Color color)
        {
            this.ColumnHeadersDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(235, 245, 255);
            this.RowHeadersDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(235, 245, 255);
        }
        /// <summary>
        /// 初始化页面控件
        /// </summary>
        private void InitDataGridViewList()
        {
            AddDataGridViewColumn();            EFTMIS.ProductUI.Common.CommonData.SetGridViewColumns(this);            CheckBoxColumnHeaderCell chkheadercell = new CheckBoxColumnHeaderCell(this, 0);            foreach (DataGridViewColumn gridcol in this.Columns)
            {
                if (gridcol.HasDefaultCellStyle.Equals(typeof(DataGridViewCheckBoxColumn)))
                    gridcol.ReadOnly = false;
                else
                    gridcol.ReadOnly = true;
            }        }
        /// <summary>
        /// 重绘列头部,如果有DataGridViewCheckBoxColumn列且有需求
        /// </summary>
        private void AddDataGridViewColumn()
        {
            if (!isAddCheckBoxColumn) return;
            bool flag = false;
            try
            {
                foreach (DataGridViewColumn dgvcol in this.Columns)
                {
                    if (dgvcol.HasDefaultCellStyle.Equals(typeof(DataGridViewCheckBoxColumn)))
                    {
                        BindColumIndex = dgvcol.Index;
                        flag = true;
                        break;
                    }
                }                if (flag)
                {
                    return;
                }
                else
                {
                    DataGridViewCheckBoxColumn newColumn = new DataGridViewCheckBoxColumn();
                    newColumn.HeaderText = "";
                    newColumn.Width = 50;
                    this.Columns.Add(newColumn);
                    this.Columns.Insert(0, newColumn);
                    BindColumIndex = 0;
                }
            }
            catch
            {
            }
        }
    }
}

解决方案 »

  1.   

    构造函数没调Base?
    官方控件里面都有一个flag用来设置是否是出于设计模式
    如果不设在窗体编辑的时候就有可能有问题建议你一部分一部分减少代码来看看
      

  2.   

    刚开始的时候还是好好的。
    我添加了一个DataGridViewCheckBox列之后就不可以了
      

  3.   

      container.Add(this);
      InitDataGridViewList();放到InitializeComponent后面去
      

  4.   

    你少继承了一些public方法造成的把
    导致设计器找不到方法