Закрепленные столбцы Datagridview справа

У меня есть datagridview со столбцами

col A | col B | ... | col M | col N 

Теперь я хочу зафиксировать col N с правой стороны, чтобы, когда пользователь прокручивает datagridview по горизонтали, столбцы A, ..., M можно было прокручивать по горизонтали, но col N оставался замороженным.

Теперь я попытался установить атрибут Frozen для col N, но затем все столбцы слева от замороженного столбца также заморожены, что мне не нужно. Лучшее, что мне удалось придумать, - это перевернуть столбцы DataTable, привязанные к DataGridView, чтобы теперь в нем был порядок

col N | col M | ... | col B | col A

а затем нарисуйте DataGridView из RightToLeft, чтобы столбцы снова поменяли местами, а затем отображались как

col A | col B | ... | col M | col N 

Другое решение, которое я пробовал, - извлечь крайние правые столбцы, которые необходимо заморозить, и поместить их в другой DataGridView с правой стороны, а остальные столбцы в исходном DataGridView, а затем синхронизировать вертикальную прокрутку для них обоих. Теперь мой вопрос: есть ли лучшие способы сделать это, если не какой из вышеперечисленных я должен предпочесть?

или другими словами:

Как я могу заморозить столбцы в правой части datagridview, не замораживая другие столбцы?


person Joe Vi    schedule 29.07.2013    source источник
comment
Что вам не нравится в текущем решении? Я вижу, что столбец заголовков строк выровнен по правому краю, и это может вам не нравится?   -  person King King    schedule 29.07.2013
comment
это и накладные расходы на перестановку столбцов в datatable в обоих случаях, то есть от datatable к gridview и от gridview к datatable для любых значений, введенных пользователем вручную, потому что, хотя пользователь думает, что вводит значение в col A, он фактически вводит его в столбец N.   -  person Joe Vi    schedule 29.07.2013


Ответы (1)


Джо, в C # DataGridView вы можете закрепить столбец в середине таблицы только в начале, как и в Excel. Это имеет смысл, потому что, если мы заморозим средний столбец, мы не будем знать, как он должен реагировать по бокам. нам понадобятся две полосы прокрутки для разных сторон?

из здесь вы можете увидеть, что это желаемое поведение С #:

Когда столбец заморожен, все столбцы слева от него (или справа от него на языках с письмом справа налево) также замораживаются. Замороженные и незамороженные столбцы образуют две группы. Если изменение положения столбца разрешено путем установки для свойства AllowUserToOrderColumns значения true, пользователь не может перетаскивать столбец из одной группы в другую.

person No Idea For Name    schedule 29.07.2013
comment
Я согласен, но есть ли какие-либо обходные пути, кроме тех, которые я предложил? - person Joe Vi; 30.07.2013
comment
Я пробовал пару лет назад и в итоге отказался. обходного пути нет, если вы не создадите свой собственный элемент управления, я имею в виду все, включая paint (). это не стоит времени ... - person No Idea For Name; 30.07.2013