面板上有很多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的宽度,然后各列宽度自适应。
@jone_e:
直接执行的是
dgvDataViewerOutCome.DataSource = hypothesisOutComeDTSource.Copy();
@我幸福: 我的意思是你先找到第一行(head),然后只给第一行设置列宽。
@jone_e: 恩,我一会试试,看结果再回复您!
@我幸福: 就是设columnHead的width 吧,按您说的
@jone_e:
C# 怎么给dgvDataView的第一行设置列宽,再次请教一下
@我幸福: 用下面的代码试试吧:
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: 好的。谢谢
我也是每次绑定数据的时候才会设置列宽的。
已优化:
先设置AutoSizeRowsMode = none;很重要,
我的就是因为是allcell所以很慢,修改后快多了。