我有一个将 VirtualMode 设置为 true 的 DataGridView,并且通过 CellValueNeeded 事件提供了数据。一切正常,但是……最后一行没有数据。我在设计器中设置了列,其中几个是链接列,这些列只显示没有数据。我验证了数据在我的源对象中(我正在绑定到 IEnumerable)并且 RowCount 设置正确。
如果我在源中添加另一行,它将不会显示,但会显示之前不可见的行。
这不是AllowUserToAddRows 的问题 - 它设置为 false。该行只是空白,并且似乎从未为 IEnumerable 中的该项目调用 CellValueNeeded 事件。
我在这里拉头发。请帮忙。
gvPilots.VirtualMode = true;
gvPilots.AutoGenerateColumns = false;
gvPilots.AllowUserToAddRows = false;
IEnumerable<pilot> _pilotData = jamboree.pilots.Where(p => p.sync_state != (byte)SyncState.IsDeleted);
gvPilots.RowCount = _pilotData.Count();
private void gvPilots_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
{
if (e.RowIndex == this.gvPilots.RowCount - 1) return;
pilot thisPilot = null;
thisPilot = this._pilotData.ElementAt(e.RowIndex);
switch (this.gvPilots.Columns[e.ColumnIndex].Name)
{
case "columnId":
e.Value = thisPilot.id;
break;
/* Bunch of case statements... */
case "columnType":
e.Value = Enum.GetName(typeof(PilotType), thisPilot.pilot_type);
break;
}
}