重写DataGridView控件,如何实现自动空数据集
由于自带的DataGridView控件功能太普通了,自己想重写这个控件,继承已经实现了一些功能,但现在希望这个控件能在最初实现空白行填充数据区域,并同时绑定一个空数据集.
现在空白行填充已经实现,但绑定空数据集却有问题,在重绘控件时,会自动增加对应的列,一直未解决,请大家帮我看一下,该如何实现?
public class MyDataGridView : DataGridView
{
public MyDataGridView(): base()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (this.Columns.Count > 0)
{
DataTable myTable = new DataTable();
if (this.DataSource != null)
{
myTable = (DataTable)this.DataSource;
}
else
{
//问题就出在这里,如果没有此循环,绑定的数据集为空,却没有列信息,不便于后期数据处理;如果加上此循环,在别的程序调用设计控件时,添加列会在*.Designer.cs文件中自动增加对应的列.
foreach (DataGridViewColumn myCol in this.Columns)
{
myTable.Columns.Add(myCol.Name, typeof(System.String));
}
}
//循环添加行
if (this.DisplayedRowCount(false) == this.Rows.Count)
{
while (this.DisplayedRowCount(false) == this.Rows.Count)
{
if (this.Rows.Count == 0)
{
myTable.Rows.Add(myTable.NewRow());
this.DataSource = myTable;
}
else
{
if (this.Rows[0].Height * (this.Rows.Count + 1) < this.Height - SystemInformation.HorizontalScrollBarHeight)
{
myTable.Rows.Add(myTable.NewRow());
this.DataSource = myTable;
}
else
{
break;
}
}
}
}
}
}
DataTable myTable = new DataTable();
foreach (DataGridViewColumn myCol in this.Columns)
{
myTable.Columns.Add(myCol.Name, typeof(System.String));
}
this.DataSource = myTable;