Column.Index не сразу отображается в TDBGrid

У меня есть TDBGrid и набор данных Client, связанный через TDataSource. Когда я пытаюсь переупорядочить столбцы сетки программно, это отлично работает, когда в сетке есть один или несколько столбцов.

Допустим, я сделал все столбцы видимыми для false. Итак, в сетке еще нет столбцов. Теперь, когда я устанавливаю индекс столбца с 11 на 0.

Columns[iColIndx].Index := iNewColIndex;
// Assume iColIndx = 11 and iNewColIndex = 0

Columns[iNewColIndex].Visible := True;
//Making the column visible

Приведенное выше назначение индекса столбца не отражается в сетке. Если я попытаюсь установить его дважды или трижды, это отразится. Я что-то упустил?


person Rahul W    schedule 14.11.2011    source источник
comment
Пробовали ли вы сначала установить Visible := True;, а затем Index? Возможно, изменение порядка на самом деле откладывается до тех пор, пока сетка не появится на самом деле (не смотрел на код, но это первое, что я подозреваю, и первое изменение, которое я бы попробовал).   -  person Ken White    schedule 15.11.2011
comment
Я пробовал то же самое, но не повезло. Индекс столбца не меняется, но установка видимости показывает столбец правильно. В этом случае, если я покажу другой столбец, для которого индекс меньше текущего показа, порядок столбцов изменится, если мы посмотрим с точки зрения индекса столбца. Есть ли способ заставить столбцы изменить индекс? Я даже пытался выставить метод ColumnMoved в TDBGrid, но это тоже бесполезно.   -  person Rahul W    schedule 15.11.2011
comment
Вы пытались вызвать Columns.Update после изменения индекса?   -  person Ken White    schedule 15.11.2011
comment
ахм... я решил это... Во-первых, это была моя ошибка. Я назначил OnDrawDataCell для сетки для рисования градиентов, но я не вызываю оттуда DefaultDrawDataCell. Более того, DefaultDrawing был отключен. После установки DefaultDrawing и вызова DefaultDrawDataCell из обработчика событий DrawDataCell теперь все работает нормально... Большое спасибо за поддержку...   -  person Rahul W    schedule 15.11.2011
comment
Но интересно то, что я не смог найти ссылку на установку индекса столбца или обновление поля из DeafaultDrawDataCell... но эта чертова штука теперь работает...   -  person Rahul W    schedule 15.11.2011
comment
если вы решили это, то вы должны опубликовать свой ответ и принять его...   -  person RBA    schedule 15.11.2011
comment
Это приемлемо и даже поощряется отвечать (и принимать) на ваши собственные вопросы: blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/   -  person Marjan Venema    schedule 15.11.2011


Ответы (1)


Я решил это. Я назначил OnDrawDataCell сетки для рисования градиентов, но я не вызывал оттуда DefaultDrawDataCell. Более того, свойство DefaultDrawing было отключено.

После установки DefaultDrawing и вызова DefaultDrawDataCell из обработчика событий DrawDataCell теперь все работает нормально.

person Rahul W    schedule 16.11.2011