只是为了扩展这个问题,还有另一种方法可以将行添加到DataGridView
,特别是如果列始终相同:
object[] buffer = new object[5];
List<DataGridViewRow> rows = new List<DataGridViewRow>();
foreach (SaleItem item in this.Invoice.SaleItems)
{
buffer[0] = item.Quantity;
buffer[1] = item.Part.Description;
buffer[2] = item.Price;
buffer[3] = item.Quantity * item.Price;
buffer[4] = item.Part.Number;
rows.Add(new DataGridViewRow());
rows[rows.Count - 1].CreateCells(gridViewParts, buffer);
}
gridViewParts.Rows.AddRange(rows.ToArray());
或者如果您喜欢 ParamArrays:
List<DataGridViewRow> rows = new List<DataGridViewRow>();
foreach (SaleItem item in this.Invoice.SaleItems)
{
rows.Add(new DataGridViewRow());
rows[rows.Count - 1].CreateCells(gridViewParts,
item.Quantity,
item.Part.Description,
item.Price,
item.Quantity * item.Price,
item.Part.Number
);
}
gridViewParts.Rows.AddRange(rows.ToArray());
显然,缓冲区中的值需要与列(包括隐藏列)的顺序相同。
这是我发现将数据输入到数据库中的最快方法DataGridView
无需将网格绑定到DataSource
。绑定网格实际上会大大加快速度,如果网格中有超过 500 行,我强烈建议绑定它而不是手动填充。
绑定还具有一个好处,即您可以保持对象完好无损,例如。如果要对选定的行进行操作,可以在绑定DatagridView的情况下这样做:
if(gridViewParts.CurrentRow != null)
{
SaleItem item = (SalteItem)(gridViewParts.CurrentRow.DataBoundItem);
// You can use item here without problems.
}
建议您的绑定类确实实现System.ComponentModel.INotifyPropertyChanged
接口,它允许它告诉网格有关更改的信息。