我最近將我的代碼從Rows.Add在 foreach 回圈中使用更新為使用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;
uj5u.com熱心網友回復:
該DataGridView.RowTemplate是個案,你不明確添加一個有用的DataGridViewRow,你只要設定資料源或值傳遞或通過行數。在您的情況下,由于您自己創建行,因此您有責任手動配置行的屬性,或通過手動克隆模板來創建行。
在以下所有示例中,RowTemplate屬性將自動用于創建行:
dataGridView1.DataSource = myList;dataGridView1.RowCount = 5;dataGridView1.Rows.Add(3);dataGridView1.Rows.Add(new object[]{1, "One"});dataGridView1.Rows.Insert(0, new object[]{1, "One"});
如果添加這樣的行dataGridView1.Rows.Add(myNewRow),則必須自己處理myNewRow屬性,例如:\
var myNewRow = new DataGridViewRow() {Height = 50};
或者您可以myNewRow通過克隆來創建RowTemplate,例如:
var myNewRow = (DataGridViewRow)dataGridView1.RowTemplate.Clone();
您可以通過在屬性的源代碼中跟蹤用法來了解更多資訊RowTemplate。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/379707.html
