我有一个Windows窗体,有两个DataGridViews(DGV),每个将包含25,000多条记录和21列.我已经使用DataAdapter成功地从数据库加载了数据,然后我尝试使用for循环填充DGV.每种方法花费的时间大致相同.第一次将数据填入DGV时需要太长时间(7分钟以上),然后随后的时间更合理(~30秒).所以我的问题是,用平均<= 1分钟的大量数据加载DGV的最佳方法是什么?我非常喜欢DGV的功能,但是如果推动推动我愿意使用不同的技术,即使它意味着放弃一些功能.
Tho*_*que 34
基本上有3种显示数据的方法 DataGridView
正如您目前所做的那样,在循环中手动创建行:正如您所注意到的,如果您拥有大量数据,效率非常低
Use the DataGridView's virtual mode, as suggested by Jonathan in his comment: the DGV only creates as many rows as can be displayed, and dynamically changes their contents when the user scrolls. You need to handle the CellValueNeeded event to provide the required data to the DGV
使用数据绑定:这是迄今为止最简单的方法.您只需DataTable使用a 填充数据库中的数据DbDataAdapter,然后将其分配DataTable给DGV的DataSource属性.DGV可以自动创建列(AutoGenerateColumns = true),也可以手动创建它们(必须将DataPropertyName列设置为要显示的字段的名称).在数据绑定模式下,DGV的工作方式与虚拟模式类似,只是它负责从数据源中获取数据,因此您无需执行任何操作.即使对于大量行也非常有效
如果您有大量行,例如 10 000 行或更多,
为避免性能泄漏 - 在数据绑定之前执行以下操作:
dataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.EnableResizing;
//or even better .DisableResizing.
//Most time consumption enum is DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders
dataGridView1.RowHeadersVisible = false; // set it to false if not needed
Run Code Online (Sandbox Code Playgroud)
数据绑定后您可以启用它。