一直来很少用.net中的winform编程,最近有个小项目要用vs2005的winform,发现一个让我很郁闷的问题。
我用以下代码打开一个窗体,打开的窗体中有一个DataGridView控件,我编程在DataGridView加入一些行(数据源中加入行,重新邦定的,DataGridView是只读的。)。我加入了几行以后,只要用鼠标选定其中一行,程序出现错误。出错的地方非常奇怪,竟然是在下面的代码中出错。在ShowDialog时出错。我选定frmTrade窗体中的DataGridView,根本没有处理任何事件,也没有关闭窗体去返回一值,程序怎么自动的返回到ShowDialog这句代码中去了。错误提示是:索引 -1 没有值。我百思不得其解,我操作frmTrade的DataGridView控件,跟这句代码没有一点相干的地方,为什么会触发它呢?
frmTrade form = new frmTrade();
if(form.ShowDialog() == DialogResult.OK) //这里出现错误,索引 -1 没有值。 IndexOutRangeException。
{
     //刷新页面操作。
}可能是我表达不够清楚,这个问题确实不好表达,难道是.net的Bug?有谁遇到过同类型的问题吗?

解决方案 »

  1.   

    看看你的frmTrade的Form_load里都干嘛了.
      

  2.   

    单步设断点,看看
    messagebox报你的值出来
      

  3.   

    单步设断点没用,根本不触发。
    我找到原因,但还没有想通为什么。
    我在Form_load中对DataGridView进行了邦定,数据源为一泛型列表<List>。
    当这个列表为空的时候,就会出现我所描述的错误。如果列表中有数据,则不会。
    奇怪的是邦定的时候不出错,当在我动态的在泛型列表中加入数据,并且重新邦定后,只要动一下DataGridView(比如双击或改变选定行)都会出错,跳回到ShowDialog这句代码中去。
      

  4.   

    你的DataGridView的相关事件有哪些?是不是某个时间触发了Dialog.Ok事件?
      

  5.   

    我没有用到DataGridView的任何事件。当双击或改变选定行时,却又触发了错误。
      

  6.   

    奇怪的是邦定的时候不出错,当在我动态的在泛型列表中加入数据,并且重新邦定后,只要动一下DataGridView(比如双击或改变选定行)都会出错是因为动态的数据出错了,所以窗体自行关闭,就回到if(form.ShowDialog() == DialogResult.OK)这里去了
      

  7.   


    就是这个样子的.所以我在1楼让你看下load里面都干嘛了.呵呵.