2012-08-04 4 views
1

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; 
     } 
} 

답변

0

그리고 난 그냥 ... 내 CellValueNeeded 이벤트의 첫 번째 라인은 지금까지의 데이터를 방해하는 내 자신의 질문에 대답이 표시된다. 복사 & 붙여 넣기 FTW.

관련 문제