本帖最后由 hugofgh 于 2013-09-04 16:38:58 编辑

解决方案 »

  1.   

    Datagridview是动态加载的?不是就在设计的时候设计列宽
      

  2.   


    Datagridview的列也是动态的,在设置列宽之前执行了
     dgvDataViewerOutCome.DataSource = hypothesisOutComeDTSource.Copy();
      

  3.   


    加载数据前没有列,Datagridview的列也是动态的,在设置列宽之前执行了
     dgvDataViewerOutCome.DataSource = hypothesisOutComeDTSource.Copy();
      

  4.   

    @ bdmh 斑竹:设置列宽还会引起其他事件吗?
    但是我用F11执行也没有进入其他事件。
      

  5.   

    直接设置 dataGridView1.AutoSizeColumnsMode 设置成Fill
      

  6.   


    就是因为有的列宽需要特定设置,所以才不能用Fill
      

  7.   


    是啊,一个Datagridview就2到3秒,累积起来就这么久了。
    其实第一次进来时很快,就是显示了的datagridview后面设置列宽就满了,不知道什么原因?
      

  8.   

    AutoSizeColumnsMode = none;
    AutoSizeRowsMode = none;多个Grid时,只对当前显示的Grid设置列宽
    120000个数据开始Load 中的
    15:40:07.942
    15:40:07.957
    将所有的列宽修改后点击按钮
    15:41:06.270
    15:41:06.270
    private void Form1_Load(object sender, EventArgs e)
            {
                var dt = CreateDisTable();            for (int i = 1; i <= 10000; i++)
                {
                    DataRow nr = dt.NewRow();                for (int j =0; j < 12; j++)
                    {
                        nr[j] = "Row" + i + "Col" + j;
                    }
                    dt.Rows.Add(nr);
                }
                dt.AcceptChanges();
                dataGridView1.DataSource = dt;
                Console.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff"));
                SetWidth();
                Console.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff"));
            }        public void SetWidth()
            {
                dataGridView1.Columns[1].Width = 70;
                dataGridView1.Columns[2].Width = 130;
                dataGridView1.Columns[3].Width = 120;
                for (int j = 4; j < dataGridView1.Columns.Count; j++)
                {
                    dataGridView1.Columns[j].Width = 120;
                }
     
            }        public  DataTable CreateDisTable()
            {
                DataTable tbl = new DataTable();
                try
                {
                    for (int i = 1; i <= 12; i++)
                    {
                        tbl.Columns.Add("col" + i, Type.GetType("System.String"));
                    }
                        
                }
                catch (Exception ex)
                {
                    ex.Data.Add(ex.Data.Count, "Func:CreateDisTable");
                    throw ex;
                }
                return tbl;
            }        private void button1_Click(object sender, EventArgs e)
            {
                Console.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff"));
                SetWidth();
                Console.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff"));
            }
      

  9.   

    先设置AutoSizeRowsMode = none;很重要,
    我的就是因为是allcell所以很慢,修改后快多了。
    谢啦!