VirtualMode が true に設定された DataGridView があり、CellValueNeeded イベントを介してデータが提供されています。すべて正常に動作していますが、最後の行にはデータがありません。デザイナーで列を設定しましたが、そのうちのいくつかはリンク列で、データが表示されません。データがソース オブジェクトにあり (IEnumerable にバインドしています)、RowCount が正しく設定されていることを確認しました。
ソースに別の行を追加すると、それは表示されませんが、以前は表示されなかった行が表示されます。
これは、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;
}
}