动态设置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"));
}