2015-05-19 2 views
0

Используя либо ListView, либо DataGridView, я хотел бы переместить заголовки столбцов в левую часть элемента управления. В принципе, поменяйте позицию столбцов на строки. Я создаю информационный апплет, который будет иметь десятки имен столбцов с одиночными значениями.ListView/DataGridView перемещает столбцы влево

В этом примере я только что создал строки с первым столбцом, являющимся заголовком. Picture

+0

Вы имеете в виду поворот сетки? Текущие строки становятся столбцами, а текущие столбцы становятся строками? Вы хотите, чтобы это было постоянным поведением этой сетки или вы пытаетесь сделать ее динамичной? – cdkMoose

+0

@cdkMoose Я думаю, что pivot будет подходящим термином для описания того, что я пытаюсь сделать, так что да. Да, я бы хотел, чтобы это было постоянным поведением. – HiTech

ответ

0

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

Если данные находятся в базе данных, вы можете использовать сводный запрос, построенный на лету, исходя из того, сколько столбцов вам нужно отображать в виде строк. Запрос может быть выполнен в SQL Server с использованием инструкции PIVOT или CASE.

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

Если вы решили это сделать, не забудьте реализовать класс INotifyPropertyChanged в классе и использовать список BindingList вместо списка для классов, если вы хотите изменить данные в форме из кода и увидеть изменения в своей сетке.

+0

Данные не будут поступать из базы данных. Если бы я сделал второе предложение, которое просто изменило бы данные, как в моем примере, верно? Если это так, я бы хотел этого избежать. – HiTech

0

Это сложно, потому что datagridview действительно не дает никакой помощи для этого вообще. Но модель может быть очень удобной, если вы хотите отобразить небольшое количество объектов с большим количеством свойств.

Ответ Sabrina_cs выше будет обрабатывать простой случай отображения данных в повернутом виде. Однако вы потеряете все расширенные возможности редактирования, предоставляемые различными классами DataGridViewxxxColumn. Это может быть решено, но вам придется бросить свой собственный класс, чтобы добраться туда.

Я построил класс в прошлом, чтобы решить эту проблему в обобщенном виде. Я не могу поделиться этим кодом, поскольку я сделал это для работы, но я могу описать решение для вас.

Сначала представляет собой файл конфигурации на основе xml, чтобы определить набор строк, которые будут отображаться в свойствах. В нашем случае этот файл конфигурации включал в себя порядок, имена свойств, типы данных, ссылки поиска, представление (флажок, поле со списком и т. Д.), Текст заголовка, статус только для чтения и все остальное, что вы считаете нужным.

При инициализации формы вы будете использовать этот конфигурационный файл для генерации строк в своей сетке и привязки определения к строке для последующего обращения к вашему коду.

При загрузке данных вам необходимо будет привязать значения к ячейкам, поскольку встроенная привязка не будет работать для вас. Если вы реализуете специальные элементы управления для данных, отличных от текста, вам нужно будет вручную привязать правильный элемент управления к ячейке либо при инициализации строк, либо при привязке фактических данных. Мы использовали это для boolean -> checkbox и lookup -> combobox.

Пока данные редактируются, вы будете нести ответственность за обновление своих собственных базовых объектов данных, которые вы, вероятно, захотите связать с столбцами во время загрузки данных. Вы можете использовать отражение для обновления свойства на основе информации в файле конфигурации.

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

Для набора данных, который мы пытались обработать, наши пользователи обнаружили, что эта презентация является чрезвычайно ценным улучшением. YMMV. Удачи.

Смежные вопросы