首页 新闻 会员 周边

Datagridview,动态设置每个dataGridView的列宽时很耗时间

0
悬赏园豆:40 [已解决问题] 解决于 2013-09-05 22: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没有进去过,列宽很快就设置完了。

我幸福的主页 我幸福 | 初学一级 | 园豆:77
提问于:2013-09-04 16:41
< >
分享
最佳答案
0

不是这里的问题吧。

而且是给列头设置列宽就可以了。

收获园豆:40
jone_e | 小虾三级 |园豆:1410 | 2013-09-04 17:11

列是动态加载的

我幸福 | 园豆:77 (初学一级) | 2013-09-04 17:24

@我幸福: 那也是先生成列头吧,在生成列头的时候固定列宽。如果不是有特别的格式,直接固定dataGridview的宽度,然后各列宽度自适应。

jone_e | 园豆:1410 (小虾三级) | 2013-09-04 18:00

@jone_e: 

 直接执行的是

dgvDataViewerOutCome.DataSource = hypothesisOutComeDTSource.Copy();

我幸福 | 园豆:77 (初学一级) | 2013-09-04 18:03

@我幸福: 我的意思是你先找到第一行(head),然后只给第一行设置列宽。

jone_e | 园豆:1410 (小虾三级) | 2013-09-04 18:20

@jone_e: 恩,我一会试试,看结果再回复您!

我幸福 | 园豆:77 (初学一级) | 2013-09-05 13:42

@我幸福: 就是设columnHead的width 吧,按您说的

我幸福 | 园豆:77 (初学一级) | 2013-09-05 13:43

@jone_e: 

C# 怎么给dgvDataView的第一行设置列宽,再次请教一下

我幸福 | 园豆:77 (初学一级) | 2013-09-05 15:44

@我幸福: 用下面的代码试试吧:

        private void Form1_Load(object sender, EventArgs e)
        {
            //生成数据
            DataTable dt = new DataTable();
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("Name", typeof(string));
            DataRow dr = null;
            for (int i = 0; i < 10; i++)
            {
                dr = dt.NewRow();
                dr[0] = i;
                dr[1] = "A" + i;
                dt.Rows.Add(dr);
            }
            dataGridView1.DataSource = dt;
        }

        /// <summary>
        /// 当数据绑定完以后设置 每一列的宽度
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            //给每一列设置宽度。这里只会设置一次,而不是每执行一行设置一次
            foreach (DataGridViewColumn c in dataGridView1.Columns)
            {
                c.Width = 100;
            }
        }
jone_e | 园豆:1410 (小虾三级) | 2013-09-05 18:04

@jone_e: 好的。谢谢

我也是每次绑定数据的时候才会设置列宽的。

已优化:

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

我幸福 | 园豆:77 (初学一级) | 2013-09-05 22:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册