C# DataGridView虚拟模式滚动时自动调整行大小
我想使用DataGridView的虚拟模式,因为我有超过150k行(总是2列)。DataGridView中的数据是从文件中提取的,是只读的(用户不能添加或删除行)。但是,我的某些行需要比其他行具有更高的高度,因为其中显示的数据位于多行上 我目前正在填充DataGridView,如下所示:C# DataGridView虚拟模式滚动时自动调整行大小,c#,winforms,datagridview,C#,Winforms,Datagridview,我想使用DataGridView的虚拟模式,因为我有超过150k行(总是2列)。DataGridView中的数据是从文件中提取的,是只读的(用户不能添加或删除行)。但是,我的某些行需要比其他行具有更高的高度,因为其中显示的数据位于多行上 我目前正在填充DataGridView,如下所示: private struct ContactEntry { public string Name { get; set; } public string Addr { get; set; } }
private struct ContactEntry
{
public string Name { get; set; }
public string Addr { get; set; }
};
private void UpdateDataGridView(List<Contact> listContact)
{
List<ContactEntry> newList = new List<ContactEntry>();
for (int index = 0; index < listContact.Count; index++)
{
Contact ct = listContact[index];
string addresses = string.Empty;
if (Contact.Addrs != null)
{
// Construct list of addresses
foreach (string addr in Contact.Addrs)
{
addresses = String.Format("{0}{1}{2}", addresses, Environment.NewLine, addr);
}
// Removes first environment new line
addresses = addresses.Remove(0, 2);
var entry = new ContactEntry();
entry.Name = Contact.Name;
entry.Addr = addresses;
newList.Add(entry);
}
}
_dgvContacts = newList;
_dgvContacts.CellValueNeeded += _dgvContacts_CellValueNeeded;
// Set the row count
_dgvContacts.RowCount = newList.Count;
_dgvContacts.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
_dgvContacts.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells;
if (_dgvContacts.CurrentCell != null)
{
_dgvContacts.CurrentCell.Selected = false;
}
}
private void _dgvContacts_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
{
switch (_dgvContacts.Columns[e.ColumnIndex].Name)
{
case "Name":
e.Value = _dgvContacts[e.RowIndex].Name;
break;
case "Addresses":
e.Value = _dgvContacts[e.RowIndex].Addr;
break;
}
}
private struct ContactEntry
{
公共字符串名称{get;set;}
公共字符串Addr{get;set;}
};
private void UpdateDagRidView(列表列表联系人)
{
List newList=新列表();
for(int index=0;index
这样,由于虚拟模式,UI加载很快,但是当表单加载时,只调整第一个可见行的高度。当我向下滚动时,行中的数据会更改为列表中的新值,但高度不会更改。但是,当我调整窗体大小时,行高度会像应该的那样进行更新。请尝试:“_-dgvContacts.AutoSizeRowsMode=DataGridViewAutoSizeRowsMode.AllCells;”@Graffi是否必须使用将此属性设置在特定位置?因为我尝试了你的建议,但它不起作用。当网格处于VirtualMode时,使用AllCells模式时要小心。这将为每个单元调用CellValueRequired事件,以确定要设置的大小,从而否定虚拟模式的用途。我在处理百万行数据集时遇到了这个问题,它将我的系统锁定了几分钟。