当数据源超过5000行,比如有10000行,下拉滚动条,用鼠标点击最后一行时,发生错误:未处理的“System.*Exception”类型的异常出现在 System.Drawing.dll 中。
try catch扑捉不到,断点更不知放哪里。
10 个解决方案
#1
你看看DataGridView控件是否绑定了鼠标进入,cell点击之类的事件?
我怀疑是有绑定事件,点击触发,递归过多,然后栈溢出
我怀疑是有绑定事件,点击触发,递归过多,然后栈溢出
#2
你确定行少就没问题?
比如一共只有2行数据,你点最后一行(第3行),不报错?
比如一共只有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;
}
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事件里面
而是触发了事件
之前我用dev的gridcontrol遇到过和你类似的栈溢出,我那个是出在RollCellStyle事件里面
#8
没堆栈信息吗?
#9
.net的DataGridView控件,拖到一个窗口上,属性都是默认属性,也没有定义任何事件处理代码,就上面几行代码。
#10
貌似找到原因:.net2.0机器上执行,会溢出,在.net2.0 SP2机器上不会溢出。
谢谢各位,先结贴。
谢谢各位,先结贴。
#1
你看看DataGridView控件是否绑定了鼠标进入,cell点击之类的事件?
我怀疑是有绑定事件,点击触发,递归过多,然后栈溢出
我怀疑是有绑定事件,点击触发,递归过多,然后栈溢出
#2
你确定行少就没问题?
比如一共只有2行数据,你点最后一行(第3行),不报错?
比如一共只有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;
}
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事件里面
而是触发了事件
之前我用dev的gridcontrol遇到过和你类似的栈溢出,我那个是出在RollCellStyle事件里面
#8
没堆栈信息吗?
#9
.net的DataGridView控件,拖到一个窗口上,属性都是默认属性,也没有定义任何事件处理代码,就上面几行代码。
#10
貌似找到原因:.net2.0机器上执行,会溢出,在.net2.0 SP2机器上不会溢出。
谢谢各位,先结贴。
谢谢各位,先结贴。