gpt4 book ai didi

vb.net - 如何从标题文本属性获取 DGV 列的设计 > 名称属性

转载 作者:行者123 更新时间:2023-12-02 18:37:55 24 4
gpt4 key购买 nike

我正在尝试检查 CheckedListBox1 中未选中的项目,并根据返回的值隐藏 DataGridView1 中的相关列,但问题是 CheckedListBox1 中显示的值是 DGV 列的 HeaderText 属性,而不是 Name 属性需要隐藏 DGV 中的列。

参见下面的代码:

For Each checked_item As Object In CheckedListBox1.Items
If Not CheckedListBox1.CheckedItems.Contains(checked_item) Then
DataGridView1.Columns("").Visible = False
End If
Next

在引用列的 HeaderText 属性时,是否可以检索 DGV 列的“Name”属性?

最佳答案

您不需要列名称来隐藏该列。你需要专栏。名称只是获取列的一种方式。问题在于您填充 CheckedListBox 的方式。显示 HeaderText 非常有意义,因为这是用户实际看到的内容。您应该做的是将列本身放入 CheckedListBox 中,并仅显示 HeaderText。这样,项目就是列,例如

Dim columns = DataGridView1.Columns.Cast(Of DataGridViewColumn)().ToArray()

With CheckedListBox1
.DataSource = columns
.DisplayMember = NameOf(DataGridViewColumn.HeaderText)
End With

您发布的代码将变为:

For i = 0 To CheckedListBox1.Items.Count - 1
Dim column = DirectCast(CheckedListBox1.Items(i), DataGridViewColumn)

column.Visible = CheckedListBox1.GetItemChecked(i)
Next

请注意,您通常应该在绑定(bind)时最后设置DataSource,但这似乎不适用于CheckedListBox,因为它不正式支持数据绑定(bind)。因此,首先设置DataSource

编辑:

我在将评论添加到有关 ItemCheck 事件和启动时检查项目的问题后添加此内容。这里的关键是在列表初始化之前不要实际对事件采取行动,即所有项目都已初步检查过。一种方法是这样的:

Private isLoaded As Boolean = False

Private Sub Form1_Load(...) Handles MyBase.Load
'Bind the data and check the items in the CheckedListBox here.

isLoaded = True
End Sub

Private Sub CheckedListBox1_ItemCheck(...) CheckedListBox1.ItemCheck
If isLoaded Then
'Act here.
End If
End Sub

另一种方法是通过在初始化发生时不处理事件来防止引发事件。这可以通过多种方式完成,但如果您愿意的话,我会将其留给您作为练习。

由于 ItemCheck 事件在项目状态更改之前引发,因此您需要以不同于其他项目的方式对待当前项目。我上面的循环将变成这样:

For i = 0 To CheckedListBox1.Items.Count - 1
Dim column = DirectCast(CheckedListBox1.Items(i), DataGridViewColumn)

'For the item that is being checked/unchecked, use its new state.
'For other items, use their current state.
column.Visible = If(i = e.Index,
e.NewValue = CheckState.Checked,
CheckedListBox1.GetItemChecked(i))
Next

也就是说,如果所有项目最初都已检查并且所有列最初都可见,则您只需关心当前项目,因此根本不需要循环:

Dim column = DirectCast(CheckedListBox1.Items(e.Index), DataGridViewColumn)

column.Visible = (e.NewValue = CheckState.Checked)

关于vb.net - 如何从标题文本属性获取 DGV 列的设计 > 名称属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68483272/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com