And*_*w H 1 vb.net asp.net winforms objectlistview
我喜欢 ObjectListView,但在让列显示在右键菜单中时遇到了很大的问题。
当我通过 objectlistview.Columns.Add(olvcolumn) 方案添加列并设置 olvcolumn.IsVisible = False 时,它只是忽略它并显示该列。
即使列显示,它们也不会显示在右键单击列标题菜单中。我可以看到每列的排序和分组,但看不到列。
当我尝试在运行时执行此操作并执行 objectlistview.RebuildColumns() 时,所有列都会消失。
我到底做错了什么?这是初始化 objectlistview 的代码(我使用的是 fastlistview 子类)
Me.lvSelectedFiles.HideSelection = False
Me.lvSelectedFiles.FullRowSelect = True
Me.lvSelectedFiles.GridLines = True
Me.lvSelectedFiles.Dock = System.Windows.Forms.DockStyle.Fill
Me.lvSelectedFiles.Location = New System.Drawing.Point(3, 3)
Me.lvSelectedFiles.Name = "lvSelectedFiles"
Me.lvSelectedFiles.Size = New System.Drawing.Size(937, 101)
Me.lvSelectedFiles.TabIndex = 8
Me.lvSelectedFiles.UseCompatibleStateImageBehavior = False
Me.lvSelectedFiles.View = System.Windows.Forms.View.Details
Me.lvSelectedFiles.ShowCommandMenuOnRightClick = True
Me.lvSelectedFiles.ShowFilterMenuOnRightClick = True
Me.lvSelectedFiles.UseAlternatingBackColors = True
Me.lvSelectedFiles.AlternateRowBackColor = SystemColors.Control
Me.lvSelectedFiles.SelectColumnsOnRightClick = True
Me.lvSelectedFiles.SelectColumnsOnRightClickBehaviour = BrightIdeasSoftware.ObjectListView.ColumnSelectBehaviour.Submenu
Run Code Online (Sandbox Code Playgroud)
这是添加列的逻辑(显示所有代码没有意义,因为我对每一列都做了同样的事情)
olvcolhdr = New OLVColumn()
olvcolhdr.Text = "File Type"
olvcolhdr.Width = 150
olvcolhdr.DisplayIndex = 4
olvcolhdr.UseFiltering = True
olvcolhdr.Searchable = True
olvcolhdr.HeaderTextAlign = HorizontalAlignment.Left
olvcolhdr.TextAlign = HorizontalAlignment.Left
olvcolhdr.AspectGetter = Function(orow As Object)
Dim s As FoundFile = DirectCast(orow, FoundFile)
Dim sext As String = FileExtensionInfo(AssocStr.FriendlyDocName, s.Extension)
Return (sext)
End Function
lvSelectedFiles.Columns.Add(olvcolhdr)
olvcolhdr = New OLVColumn()
olvcolhdr.Text = "Size"
olvcolhdr.Width = 75
olvcolhdr.DisplayIndex = 5
olvcolhdr.UseFiltering = True
olvcolhdr.HeaderTextAlign = HorizontalAlignment.Left
olvcolhdr.TextAlign = HorizontalAlignment.Right
olvcolhdr.AspectName = "Length"
olvcolhdr.AspectToStringFormat = "{0:#,##0}"
olvcolhdr.Searchable = True
olvcolhdr.IsVisible = False
lvSelectedFiles.Columns.Add(olvcolhdr)
Run Code Online (Sandbox Code Playgroud)
在上面的两列中,第一列最初应该是可见的,第二列是不可见的。但它们都显示为可见的。我不想将第一列设置为不可见。这总是可见的,没关系......
如果我执行上述操作,然后调用“RebuildColumns()”,所有列都会消失。
确认。请帮忙!
好吧,看来我是唯一回答我问题的人。对于将来遇到此问题的任何人,如果列没有显示在上下文菜单中,那是因为您需要添加 OLVColumns 两次!一次到列标题集合,另一次(我在将列添加到标题集合之前执行此操作,但这可能没有区别)使用 objectlistview.AllColumns 函数。如:
objectlistview.AllColumns.Add(onewolvcolumn)
如果您不执行额外的分配(至少我在添加数据时使用 AddObject 函数做到了),您将看到数据显示出来,但您不会在上下文菜单列表中看到任何列,并且如果您执行RebuildColumns() 调用,它也会删除列表视图中的所有列。
所以,最终的代码如下所示(只是相关部分):
olvcolhdr = New OLVColumn()
olvcolhdr.Text = "Size"
olvcolhdr.Width = 75
olvcolhdr.DisplayIndex = 6
olvcolhdr.UseFiltering = True
olvcolhdr.Searchable = True
olvcolhdr.HeaderTextAlign = HorizontalAlignment.Left
olvcolhdr.TextAlign = HorizontalAlignment.Right
olvcolhdr.AspectName = "Length"
olvcolhdr.AspectToStringFormat = "{0:#,##0.0}"
lvFindInsideFiles.AllColumns.Add(olvcolhdr)
lvFindInsideFiles.Columns.Add(olvcolhdr)
olvcolhdr = New OLVColumn()
olvcolhdr.Text = "Message"
olvcolhdr.Width = 150
olvcolhdr.DisplayIndex = 7
olvcolhdr.UseFiltering = True
olvcolhdr.Searchable = True
olvcolhdr.HeaderTextAlign = HorizontalAlignment.Left
olvcolhdr.TextAlign = HorizontalAlignment.Left
olvcolhdr.AspectName = "ErrorMessage"
lvFindInsideFiles.AllColumns.Add(olvcolhdr)
lvFindInsideFiles.Columns.Add(olvcolhdr)
Run Code Online (Sandbox Code Playgroud)
查看我在哪里添加了 olvcolhdr(这是一个 OLVColumn 对象)两次,一次使用 Columns 集合,另一次使用 AllColumns。我在文档中或任何示例中都找不到这个,除了复杂的示例,我没有看过这个示例,因为我有足够多的问题需要担心基本示例!
| 归档时间: |
|
| 查看次数: |
1440 次 |
| 最近记录: |