Fir*_*iro 5 .net c# datagridview winforms
我正在尝试实现datagridview的虚拟模式,但是当我将RowCount设置为某个数字(以显示滚动条)时,网格希望一次拥有所有行,而不仅仅是显示行。
DataGridView grid = new ...;
grid.VirtualMode = true;
grid.CellValueNeeded += OnCellValueNeeded;
grid.RowCount = dataprovider.GetFullCount();
Run Code Online (Sandbox Code Playgroud)
如何告诉网格仅请求显示的行?
这只是一个猜测,但是您是否已将AutoSizeRowsMode或AutoSizeColumnsMode值设置为AllCells或将任何列设置为该值?尝试将调整大小模式设置为“无”或仅设置为“ DisplayedCells”,看看是否仍然存在问题。
不确定这是否与我遇到的问题相同,但是当定期大幅更改 VirtualMode DataGridView 上的 RowCount 时,我的性能确实很差。
我注意到滚动条正在“缓慢”变化;即它看起来像是在单独删除我的虚拟行(!)。
无论如何,grid.Rows.Clear()在每次调用之前执行一次以grid.RowCount = n显着提高性能。
不幸的是,这似乎是标准行为。我可以通过以下方式解决它
void OnCellValueNeeded(...)
{
if(!_active) return;
}
grid.VirtualMode = true;
grid.CellValueNeeded += OnCellValueNeeded;
_active = false;
grid.RowCount = dataprovider.GetFullCount();
_active = true;
Run Code Online (Sandbox Code Playgroud)
或在后台线程中实现 IBindingList、ITypedList 和复杂的延迟获取
更新:问题现在似乎已解决。我无法再使用以下命令重现它:
static class Program
{
private static Form form;
private static int i;
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var grid = new DataGridView
{
Dock = DockStyle.Fill,
VirtualMode = true,
AllowUserToAddRows = false,
Columns =
{
new DataGridViewTextBoxColumn { HeaderText = "foo" },
new DataGridViewTextBoxColumn { HeaderText = "bar" },
},
};
grid.CellValueNeeded += OnCellValueNeeded;
form = new Form
{
Controls = { grid }
};
//grid.RowCount = 0;
grid.RowCount = 10000;
Application.Run(form);
}
private static void OnCellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
{
i++;
form.Text = i.ToString();
e.Value = "fooValue";
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6385 次 |
| 最近记录: |