Это то, что я делаю, потому что столбцы добавляются во время выполнения через предпочтения пользователя.
Я использую listView для отображения информации из базы данных пользователю. (Я, вероятно, должен был бы использовать DataGrid, но когда я впервые сделал программу, DataGrid не имела встроенного полного выбора строк, и я был слишком большим новичком, чтобы просмотреть примеры пользовательских элементов управления, которые я нашел)
Пользователь выбирает, какие столбцы он хочет отобразить из общего количества, каков его размер и текст заголовка.
Я создал таблицу пользовательских настроек, в которой сохранена информация о столбцах для добавления
- ColumnVisible = bool
- ColumnText = string = текст для отображения в заголовке
- columnWidth = int
- ColumName = string = точное имя, на которое этот столбец будет ссылаться в моей другой базе данных
- ColumnIndex = int = индекс отображения столбца
Я также создал класс ColumnPreferences
и добавил свойство для каждого из этих столбцов
Использовал DataReader для создания List<ColumnPreferences>
Я сортирую этот список в соответствии с индексом отображения, поэтому я могу перебирать его в порядке отображения столбцов.
Я выполняю оператор if, проверяя, видимы ли следующие предпочтения в настройках.
Если это так, я добавляю столбец, используя ListView1.Columns.Add(ColumnName, ColumnText, ColumnWidth);
На этом этапе все столбцы установлены, чтобы сохранить место, куда пользователь перетаскивает их, чтобы я сделал в основном обратное. Я перебираю все столбцы в Listview.columns и сохраняю индекс отображения столбца и ширину столбца обратно в мою таблицу пользовательских настроек
При загрузке фактических данных из таблицы я использую тот же список предпочтений столбцов, чтобы проверить, следует ли мне отображать данные.
он снова отсортирован по индексу отображения, я проверяю, видим ли он, если нет, пропускаю его и перехожу к следующему
если это видно, я использую myDataReader[ ColumnPreference.ColumnName ]
, чтобы найти подходящий порядковый номер для данных, которые я хочу.
Я просто добавляю каждый из этих результатов по порядку к элементу / подпунктам представления списка, а затем добавляю их к представлению списка