VirtualMode가 true로 설정된 DataGridView가 있고 데이터가 CellValueNeeded 이벤트를 통해 제공됩니다. 모든 것이 정상적으로 작동하지만 마지막 행에는 데이터가 없습니다. 필자는 디자이너에서 열을 설정했으며 그 중 몇 개는 링크 열이며 그 중 일부는 데이터 만 표시합니다. 데이터가 내 소스 개체 (IEnumerable에 바인딩되어 있음)에 있고 RowCount가 올바르게 설정되어 있는지 확인했습니다.WinForms DataGridView - 마지막 행 데이터가 표시되지 않습니다.
소스에 다른 행을 추가하면 표시되지 않지만 이전에 표시되지 않은 행이 표시됩니다.
이것은 이 아니며 AllowUserToAddRows의 문제입니다. false로 설정됩니다. 행이 단지 비어 있으며 CellValueNeeded 이벤트는 IEnumerable의 해당 항목에 대해 호출되지 않습니다.
나는 여기에서 내 머리카락을 꺼냈다. 도와주세요.
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;
}
}