我从另一个软件的接口获取数据,筛选后插入到datagridview中显示。获取数据都正常,开始插入几条也都正常。但是根据datagridview的size,当插入20几条数据,刚刚出现垂直滚动条时,就再也插不进数据了,然后就假死了,导致另一个软件也跟着假死了。这个是什么问题?
我用listbox代替datagridview来显示数据就一点问题也没有,有多少条数据就能正常显示多少条,垂直滚动条正常出现并能正常拖动。难道是datagridview的滚动条设置方面有误?ScrollBars我设置为Both,应该没啥问题啊。。

解决方案 »

  1.   

            private void btnStart_Click(object sender, System.EventArgs e) //点击开始按钮后开始从另一个软件的接口接收数据
            {
                aaa.bbb += new ccc.ddd(bbb);//这里的ccc是引用的另一个软件的dll
            } // Event handlers
            private void bbb(ref ccc.eee fff)
            {
                int currentNumber = this.dataGridView1.Rows.Count; 
                if (条件成立)
                {
                    try
                    {
                        this.dataGridView1.SuspendLayout();                    object[] rowContent = new object[6];
                        rowContent[0] = ++currentNumber;
                        rowContent[1] = fff.bstrSymbol;
                        rowContent[2] = fff.bstrUpdateTime;
                        rowContent[3] = fff.fLastPrice;
                        rowContent[4] = fff.nLastSize;
                        rowContent[5] = fff.bstrLastExch;                    this.dataGridView1.Rows.Insert(0, rowContent);
                        this.dataGridView1.ResumeLayout();
                        this.dataGridView1.Update();
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Kao! Something was wrong when inserting into dataGridView!");
                    }
                }
            }如果把try里面的内容换成下面这句话测试,一点问题也没有,都正常插入,有几百几千条数据都能正常插入到listbox中。this.lbMsgs.Items.Insert(0, fff.bstrSymbol + "   " + fff.fLastPrice + "   " + fff.nLastSize + "   " + fff.bstrUpdateTime + "   " + fff.bstrLastExch);
      

  2.   

    昨晚问题我自己解决了。
    将datagridview的scrollbars属性设为None而不是Both,即禁止出现横向和纵向滚动条,问题就不会出现了。
    这样的新问题是没有滚动条很不方便,影响我查看内容。问题只是部分解决了,但不知原因。猜测可能是线程方面的问题,工作线程和UI线程
      

  3.   

    我也遇这个问题,听了上面的意见。1、我将datagridview的scrollbars属性设为None,即禁止出现横向和纵向滚动条,假死问题就不会出现了。2、然后当达到一定行数(占满DataGridView大小的行数)以后,再做一个按钮,把滚动条属性打开为Both,就能正常使用了!(个人觉得:这个还可以根据窗体大小 / 行高的比较 来使用代码智能控制了)