Как установить значение ячейки заголовка строки Winforms DataGridView в виртуальном режиме? - PullRequest
0 голосов
/ 21 ноября 2011

Я пытаюсь изменить значение ячейки заголовка при использовании вида сетки в виртуальном режиме, но не могу заставить его работать.

В моем 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;
        }
    }

Ответы [ 2 ]

3 голосов
/ 24 ноября 2011

В коротких экспериментах, которые я провел, HeaderCell.Value всегда отображается в заголовке строки, независимо от того, где он был установлен или от того, была ли сетка в виртуальном режиме.слишком узкое, чтобы увидеть значение.

Еще одно: RecordNumber не является строкой - значение, отображаемое в заголовке строки, должно быть строкой.

0 голосов
/ 05 декабря 2014

Со мной происходило то же самое, я заметил, что применяю заголовок к новой строке, а затем перезаписываю его строкой со значениями, но без заголовка, поэтому просто попробуйте это:

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

(rowindex -1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...