1

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

1 に答える 1

0

そして、私は自分の質問に答えました... CellValueNeeded イベントの最初の行が、データが表示されないようにしています。FTW をコピーして貼り付けます。

于 2012-08-04T17:54:26.877 に答える