我做了一个继承控件继承了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
{
}
}
}
}
我是不是有什么事情没做?
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
{
}
}
}
}
解决方案 »
- EventHandler的迷惑
- |ZYCWPF| 花了一个多星期还是搞不定WCF的双工,有示例下载 谢谢
- 线程中的 Suspend和Resume方法都已经过时了,用什么替换好呢?
- 汉字拼音声母计算类
- PowerPoint二次开发-无法关闭进程
- 如何打印:winForm中的TextBox多行和单行及listview中的内容
- 能不能自动生成css文件?~~ 急 在线等~~~~~
- 急需一个超级棒的图形控件!!!!!!!!!!急!急!急!
- 请问表格怎么循环两列啊,在线等,急
- 问2 个关于tabcontrol的问题
- AjaxControlToolkit上传后 弹不出日期选择框
- VS2008 treeview
官方控件里面都有一个flag用来设置是否是出于设计模式
如果不设在窗体编辑的时候就有可能有问题建议你一部分一部分减少代码来看看
我添加了一个DataGridViewCheckBox列之后就不可以了
InitDataGridViewList();放到InitializeComponent后面去
导致设计器找不到方法