首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

动态设置dataGridView的列宽有关问题,

2013-09-07 
动态设置dataGridView的列宽问题,急...本帖最后由 hugofgh 于 2013-09-04 16:38:58 编辑面板上有很多Datag

动态设置dataGridView的列宽问题,急...
本帖最后由 hugofgh 于 2013-09-04 16:38:58 编辑 面板上有很多Datagridview,动态设置每个dataGridView的列宽时很耗时间,一个datagridview大概12列左右,现在设置完一个dataGridView的列宽需要耗时2到3秒。
设置列宽时已经取消了dgvDataViewer_ColumnWidthChanged和dgvDataViewer_CellFormatting事件。
怎么样才能缩短时间,为什么要这么长时间,求解释,求解决办法。

代码如下:
                _gridview.Columns[1].Width = 70;
                _gridview.Columns[2].Width = 130;
                _gridview.Columns[3].Width = 120;
                for (int j = 4; j < _gridview.Columns.Count; j++)
                {
                    _gridview.Columns[j].Width = 120;
                }


补充:如果这个Datagridview之前进去过,再设置列宽需要耗时2到3秒,但是如果这个Datagridview没有进去过,列宽很快就设置完了。 datagridview C#
[解决办法]
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"));
        }

热点排行