base.Dispose(disposing) 未处理的 system.stackoverflowexception

karxiu 2013-07-22 11:46:37
就是简单的手持机 扫描条码界面
首先判断该条码在这个单号里又没,没有的话就添加,然后关闭当前窗口,重新加载该窗口,
this.Name 为单号
现在的问题是扫描一会儿就出现如下错误
未处理的 system.stackoverflowexception



private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
string sqlcount = "select count(*) from mb_xs_detail where sheet_no='" + this.Name + "' and item_no='" + this.textBox1.Text + "'";
SQLCEWrapper cetest = new SQLCEWrapper();
int i = int.Parse(cetest.ReObjectvalue(sqlcount).ToString());

if (textBox1.Text == "")
{
MessageBox.Show("请输入条码");
this.textBox1.Focus();
}

else if (i != 0)
{
MessageBox.Show("该条码已存在");
this.textBox1.Text = "";
this.textBox1.Focus();
}

else
{
// SQLCEWrapper cetest = new SQLCEWrapper();

string sqlgetid = "select max(SUBSTRing(id,3,5)) from mb_xs_detail";
string newid = cetest.Getid(sqlgetid);

string SQLstr = "INSERT INTO mb_xs_detail (id,sheet_no,item_no) values ('" + newid + "','" + this.Name + "','" + this.textBox1.Text + "')";
//string SQLstr = "INSERT INTO mb_xs_detail (id,sheet_no,item_no) values ('00009'" + this.Name + "','" + this.textBox1.Text + "')";
cetest.ExecuteNoResult(SQLstr);
this.Dispose();
SendDetail form1 = new SendDetail(this.Name);
form1.ShowDialog(); //模式窗口,先运行Form1的作用


}
}

}


窗口初始化的代码
this.textBox2.Text = "销售发货-" + this.Name;
this.lbczy.Text = user.UserName;


string strSql = "SELECT id as 流水号,item_no as 条码,sheet_no 单号 FROM mb_xs_detail where sheet_no='" + this.Name + "'";
string sqlcountqty = "select count(*) from mb_xs_detail where sheet_no='" + this.Name + "'";

SQLCEWrapper cetest = new SQLCEWrapper();
int j = int.Parse(cetest.ReObjectvalue(sqlcountqty).ToString());
this.lbqty.Text = j.ToString();

// 将 ResultSetView 绑定到 DataGrid 控件
this.dataGrid1.DataSource = cetest.resultSetView(strSql);

//设置DataGrid 列宽 第一步
DataGridTableStyle myDataGridStyle = null;
GridColumnStylesCollection myDataGridColStyle = null;
myDataGridStyle = new DataGridTableStyle();
dataGrid1.TableStyles.Clear(); // 先清除格式
dataGrid1.TableStyles.Add(myDataGridStyle);//加载格式

// 设置dataGrid 列的宽度
myDataGridColStyle = dataGrid1.TableStyles[0].GridColumnStyles;
myDataGridColStyle[0].Width = 55;
myDataGridColStyle[1].Width = 150;
myDataGridColStyle[2].Width = 120;
}
...全文
223 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
karxiu 2013-07-26
  • 打赏
  • 举报
回复
引用 4 楼 qldsrx 的回复:
你的逻辑很有问题,先调用this.Dispose();后再执行其它和this相关的代码,这意味着那个this.Dispose()将被压入堆栈延后响应,你操作次数越多,压入堆栈的数量就越多,自然会堆栈溢出了。 这里既然是打开自己,那就根本没有必要先关闭自己,直接更新界面上的元素即可,这样效率更高,速度更快。
string sheetno = This.Name ;
                      SendDetail form2 = new SendDetail(sheetno);
                      form2.ShowDialog();  //模式窗口,先运行Form1的作用
                      this.Dispose();
string sheetno = This.Name ;
                       this.Dispose();
                      SendDetail form2 = new SendDetail(sheetno);
                      form2.ShowDialog();  //模式窗口,先运行Form1的作用
                      
不管 this.Dispose(); 都是会堆栈溢出 。。。。望帮忙解决
qldsrx 2013-07-22
  • 打赏
  • 举报
回复
你的逻辑很有问题,先调用this.Dispose();后再执行其它和this相关的代码,这意味着那个this.Dispose()将被压入堆栈延后响应,你操作次数越多,压入堆栈的数量就越多,自然会堆栈溢出了。 这里既然是打开自己,那就根本没有必要先关闭自己,直接更新界面上的元素即可,这样效率更高,速度更快。
  • 打赏
  • 举报
回复
var name = this.Name; this.Dispose(); SendDetail form1 = new SendDetail(name);
linuxca 2013-07-22
  • 打赏
  • 举报
回复
karxiu 2013-07-22
  • 打赏
  • 举报
回复


数据库 SQLCE
qldsrx 2013-07-22
  • 打赏
  • 举报
回复
引用 5 楼 karxiu 的回复:
确实是调用this.Dispose()的顺序错了,这样堆栈溢出的问题解决了。 你说直接更新元素,提高效率,是不是插入了数据后,再次 重载datagrid ?
很简单啊,复制初始化窗口的代码,保留“this.dataGrid1.DataSource =”之前的那部分,稍加修改以便重新得到DataGrid的数据源即可。
karxiu 2013-07-22
  • 打赏
  • 举报
回复
确实是调用this.Dispose()的顺序错了,这样堆栈溢出的问题解决了。 你说直接更新元素,提高效率,是不是插入了数据后,再次 重载datagrid ?

110,555

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧