首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

重写DataGridView控件,怎么实现自动空数据集

2012-12-14 
重写DataGridView控件,如何实现自动空数据集由于自带的DataGridView控件功能太普通了,自己想重写这个控件,

重写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;
                            }
                        }
                    }
                } 
}

}


[最优解释]
建个空DataSet绑定
[其他解释]
在onpaint里做数据源...感觉太奇怪,换换思路,datasource update什么的
[其他解释]
我这是继承写的一个控件,使用控件前不能确定空数据集的列信息,所以想采用下面的方法绑定,结果在其他程序调用这个控件,设计新增列时会增加一倍的列出来.

DataTable myTable = new DataTable(); 
foreach (DataGridViewColumn myCol in this.Columns)                     
{   
   myTable.Columns.Add(myCol.Name, typeof(System.String));                     

this.DataSource = myTable;

[其他解释]
本来设计时添加2列:
this.Column1 = new DataGridViewTextBoxColumn();
this.Column2 = new DataGridViewTextBoxColumn();
结果系统又自动添加了下面两列.
this.dataGridViewTextBoxColumn1 = new DataGridViewTextBoxColumn();
this.dataGridViewTextBoxColumn2 = new DataGridViewTextBoxColumn();
为什么会增加这两列呢?一直百思不得其解.
------其他解决方案--------------------


我也觉得写在onpaint事件里不太对,那样如果运行时会反复调用,影响效率.
除此之外,不知道有没有什么事件在运行控件之前执行,构造函数里我试过的,由于还没有执行onpaint事件,列也就为空,也无法绑定空数据集.

热点排行