如何在虚拟模式下设置Winforms DataGridView的行标题单元格值?

问题描述:

我想在虚拟模式下使用网格视图编辑标题单元格的值,但我无法让它工作。如何在虚拟模式下设置Winforms DataGridView的行标题单元格值?

在我CellValueNeeded事件中,我有以下代码:

grvResults.Rows[e.RowIndex].HeaderCell.Value = record.RecordNumber; 

不幸的是,我的头细胞仍然显示为空白。

如何获取显示的行标题值?最终的结果是我需要我的行来显示它们的行号,以更好地跟踪数据。


更新:完整的事件代码如下:

private void grvResults_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e) 
    { 
     const int BATCH_REQUEST_SIZE = 50; 
     int row = e.RowIndex + 1; 
     LogRecord record = null; 

     // Check if this record for this row is cached 
     if (!_recordCache.ContainsKey(row)) 
     { 
      // Retrieve the requested record + a batch more to speed up operations and lessen queries 
      int page = (row/BATCH_REQUEST_SIZE) + 1; 

      var records = _currentStore.GetFilteredRecords(_filters, _currentSessionId, BATCH_REQUEST_SIZE, page); 
      if (records.Count > 0) 
      { 
       // Add all the records to the cache 
       for (int x = 0; x < records.Count; x++) 
        if (!_recordCache.ContainsKey(row + x)) 
         _recordCache.Add(row + x, records[x]); 
      } 
     } 

     // Get the record from the cache 
     record = _recordCache[row]; 

     if (record != null) 
     { 
      // Set the header cell to the record number 
      grvResults.Rows[e.RowIndex].HeaderCell.Value = record.RecordNumber; 

      // Match the cell to the field 
      string cellFieldName = grvResults.Columns[e.ColumnIndex].Name; 
      if (record.Fields.Any(x => x.FieldName.Equals(cellFieldName, StringComparison.CurrentCultureIgnoreCase))) 
       e.Value = record.Fields.Where(x => x.FieldName.Equals(cellFieldName, StringComparison.CurrentCultureIgnoreCase)).Single().StringValue; 
     } 
    } 
+0

你能否提供更多的代码 - 我只是想设置HeaderCell值在虚拟模式(从内外CellValueNeeded和在其他事件),它工作正常时。 –

+0

我添加了完整的CellValueNeeded方法,但我没有看到任何其他方法会影响此 – KallDrexx

+0

这可能是一个愚蠢的问题,但是您确定RecordNumber的类型是字符串吗?整数不会显示。 –

在简短的实验我已经做了HeaderCell.Value始终显示行标题,无论它被设置或网格是否处于虚拟模式。

一种可能性是行标题太窄而无法看到值。

另一个是RecordNumber不是一个字符串 - 行头中显示的值必须是一个字符串。

+0

Doh,我没有意识到我不能给它一个整数,我认为它会自动'ToString()'它。将其更改为'RecordNumber.ToString()'工作! – KallDrexx

同样的事情是发生在我身上,我发现我申请的标题为新行,然后用值,但没有头一排覆盖它,所以只是试试这个:

grvResults.Rows [E .RowIndex-1] .HeaderCell.Value = record.RecordNumber;

(rowIndex位置-1)