【发布时间】:2022-01-14 06:10:18
【问题描述】:
我最近更新了我的代码,从在 foreach 循环中使用 Rows.Add 到使用 AddRange 填充 list of rows。事实证明,这可以提高填充 datagridview 的速度(显着),但我遇到了行高问题。这不是Rows.Add 的问题,因为我可以轻松设置rowtemplate.height 属性。部分活动:
var items = listItems; int count = 1;
object[] buffer = new object[3];
List<DataGridViewRow> rows = new List<DataGridViewRow>();
foreach (var i in items)
{
buffer[0] = count;
buffer[1] = i.Desc;
buffer[2] = i.ID;
rows.Add(new DataGridViewRow());
rows[rows.Count - 1].CreateCells(datagridItems, buffer);
count++;
}
datagridItems.Rows.AddRange(rows.ToArray());
无论出于何种原因,无论rowtemplate.height 属性设置为什么,以这种方式添加行都无关紧要。我很确定这与rows.Add(new DataGridViewRow()); 有关,因为如果我尝试在AddRange 之前添加它:
foreach (DataGridViewRow r in rows)
{
r.MinimumHeight = 46;
r.Height = 46;
}
^ 它有效。但是,我认为这不是一个好方法。所以我尝试使用new DataGridViewRow(),但到目前为止没有成功:
var items = listItems; int count = 1;
object[] buffer = new object[3];
List<DataGridViewRow> rows = new List<DataGridViewRow>();
foreach (var i in items)
{
buffer[0] = count;
buffer[1] = img;
buffer[2] = i.ID;
//rows.Add(new DataGridViewRow()); From the old example
rows.Add(new DataGridViewRow
{
MinimumHeight = 46,
Height = 46
});
rows[rows.Count - 1].CreateCells(datagridItems, buffer);
count++;
}
/* this works, but there should be a much better way of doing it
foreach (DataGridViewRow r in rows)
{
r.MinimumHeight = 46;
r.Height = 46
}
*/
datagridItems.Rows.AddRange(rows.ToArray());
为了记录,这些是在 datagridview 上设置的一些(可能)相关属性
//by the way, the datagridview is added in the designer
datagridItems.RowTemplate.Height = 46;
datagridItems.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
datagridItems.CellBorderStyle = DataGridViewCellBorderStyle.None;
datagridItems.RowTemplate.MinimumHeight = 46;
【问题讨论】: