我这样做是因为这些列是在运行时通过用户首选项添加的。
我正在使用 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 ] 来查找我想要的数据的适当序号。
我只是将这些结果中的每一个按顺序添加到列表视图项/子项中,然后将它们添加到列表视图中