DataGridView 5000行数据就发生*错误

时间:2021-12-18 14:48:29
.Net 2.0环境下,DataGridView控件,用List<Object>做数据源,或BindingSource,列自动生成。

当数据源超过5000行,比如有10000行,下拉滚动条,用鼠标点击最后一行时,发生错误:未处理的“System.*Exception”类型的异常出现在 System.Drawing.dll 中。

try catch扑捉不到,断点更不知放哪里。

10 个解决方案

#1


你看看DataGridView控件是否绑定了鼠标进入,cell点击之类的事件?

我怀疑是有绑定事件,点击触发,递归过多,然后栈溢出

#2


你确定行少就没问题?
比如一共只有2行数据,你点最后一行(第3行),不报错?

#3


行少没问题,从第1行跳到第3000行没问题,一次跳5000行以上,溢出。

#4


        List<MockEmployee> _datasource = new List<MockEmployee>();
        BindingSource _datagridviewDatabinding = new BindingSource();

        public TestDataGridView2()
        {
            InitializeComponent();
            this.Load += new EventHandler(TestDataGridView2_Load);
        }

        void TestDataGridView2_Load(object sender, EventArgs e)
        {
            //绑定数据源
            _datasource.Clear();
            for (int _tmpi = 1; _tmpi < 50000; ++_tmpi)
            {
                _datasource.Add(new MockEmployee("E_" + _tmpi.ToString(), "Seth", 18, true, "1", 5000.5m));
            }
            _datagridviewDatabinding.DataSource = _datasource;
            dataGridView1.AutoGenerateColumns = true;
            dataGridView1.DataSource = _datagridviewDatabinding;
            dataGridView1.ReadOnly = false;
        }

#5


不明白你这个"跳"是什么意思

#6


当前单元格在0,0,往下拉滚动条,到最后一行,点击鼠标,就溢出了。

#7


按照你说的现象,应该不是load里面的问题

而是触发了事件

之前我用dev的gridcontrol遇到过和你类似的栈溢出,我那个是出在RollCellStyle事件里面

#8


没堆栈信息吗?

#9


.net的DataGridView控件,拖到一个窗口上,属性都是默认属性,也没有定义任何事件处理代码,就上面几行代码。 

#10


貌似找到原因:.net2.0机器上执行,会溢出,在.net2.0 SP2机器上不会溢出。
谢谢各位,先结贴。

#1


你看看DataGridView控件是否绑定了鼠标进入,cell点击之类的事件?

我怀疑是有绑定事件,点击触发,递归过多,然后栈溢出

#2


你确定行少就没问题?
比如一共只有2行数据,你点最后一行(第3行),不报错?

#3


行少没问题,从第1行跳到第3000行没问题,一次跳5000行以上,溢出。

#4


        List<MockEmployee> _datasource = new List<MockEmployee>();
        BindingSource _datagridviewDatabinding = new BindingSource();

        public TestDataGridView2()
        {
            InitializeComponent();
            this.Load += new EventHandler(TestDataGridView2_Load);
        }

        void TestDataGridView2_Load(object sender, EventArgs e)
        {
            //绑定数据源
            _datasource.Clear();
            for (int _tmpi = 1; _tmpi < 50000; ++_tmpi)
            {
                _datasource.Add(new MockEmployee("E_" + _tmpi.ToString(), "Seth", 18, true, "1", 5000.5m));
            }
            _datagridviewDatabinding.DataSource = _datasource;
            dataGridView1.AutoGenerateColumns = true;
            dataGridView1.DataSource = _datagridviewDatabinding;
            dataGridView1.ReadOnly = false;
        }

#5


不明白你这个"跳"是什么意思

#6


当前单元格在0,0,往下拉滚动条,到最后一行,点击鼠标,就溢出了。

#7


按照你说的现象,应该不是load里面的问题

而是触发了事件

之前我用dev的gridcontrol遇到过和你类似的栈溢出,我那个是出在RollCellStyle事件里面

#8


没堆栈信息吗?

#9


.net的DataGridView控件,拖到一个窗口上,属性都是默认属性,也没有定义任何事件处理代码,就上面几行代码。 

#10


貌似找到原因:.net2.0机器上执行,会溢出,在.net2.0 SP2机器上不会溢出。
谢谢各位,先结贴。