- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试检查 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/
我是 C# 的初学者,创建了一个 DataGridView,如下所示: private DataGridViewTextBoxColumn createText(string name, string
我有一个表单和一个数据 GridView .... 我正在通过以下方法填充数据 GridView private void EquipmentFinder_Load(object sender, E
我正在尝试编写一些代码以允许我的应用程序的用户拖放 DataGridView 中的行以重新排序。问题是,被拖动的行在被拖放时消失了——所以拖放的效果只是删除该行。这是我的代码: private R
我的 DGV 填充了用户输入的值(非数据绑定(bind))。行数是动态的。但是,即使使用默认的五行,当我到达最后(第 5 行)/第 4 行时,从一个单元格到另一个单元格以及从一行到另一行的制表符会导致
我在 DataGridView 中显示一个小时列表,并想用阴影显示那些不属于营业时间的时间。我正在尝试使用 CellPainting 来执行此操作,但是我得到了奇怪的结果。有人可以解释一下我在这里做错
我有未绑定(bind)的 DGV,我想在 DGV Leave EventHandller 上删除不需要的最后一行。怎么做? 我知道以编程方式将新行添加到 dgv 并设置属性 AllowUserToAd
我似乎在名称循环上一切正常,但是在加载时将玩家名称分配给数据 GridView 中的名称列,但位置列似乎在连续循环并且没有为每个玩家关联正确的值. public void button7_Click(
我创建了一个显示动画图像的自定义 DataGridView 单元格和列。它非常简单并且工作正常,只是它从 DGV 抛出一个“DataError”事件:“单元格的格式化值类型错误” 我已经从我的两个自定
我正在通过日期选择器控件获取日期,但没有取得任何成功,任何人都有任何建议。 我试过: Dim fromDate As New DateTime(startdate_picker_search_supp
我有一个场景,我有多个用户(一次大约 50 个)连接到一个表,所有这些用户都不断地对已经存在的行进行更改。我需要做的是以某种方式始终显示数据库的实时 View 。 拥有表的缓存副本不是一个有效的选择,
我需要将列中的空值放在 DGV 列的底部。我需要它按升序排列,这会将空值放在第一位,但我不想先看到它,我想在我的最大值之后看到它们。这是我到目前为止所拥有的,但它将空值放在第一位,我不确定如何处理将空
我目前正在尝试将 ComboBox 添加到 dataGridView。 在DGV中,有5列:checkbox, string, string, combobox, combobox。 两个组合框列都配
我正在尝试检查 CheckedListBox1 中未选中的项目,并根据返回的值隐藏 DataGridView1 中的相关列,但问题是 CheckedListBox1 中显示的值是 DGV 列的 Hea
我正在尝试检查 CheckedListBox1 中未选中的项目,并根据返回的值隐藏 DataGridView1 中的相关列,但问题是 CheckedListBox1 中显示的值是 DGV 列的 Hea
我有一个带有列(组合框列)的数据 GridView 。实现了以下功能。 选择几行(点击最左边的行标题并拖动)。 以编程方式将值设置为某个值(见下文)。所有选定的行都会更改。 foreach (
我使用 Select 查询从 SQL 表中填充数据表,然后将该数据表用作我的 DataGridView 的数据源。 在我的 SQL 表中,我有一个名为“status”的列,其中包含 1-3 之间的值。
我在 QNAP 上有 MySQL 数据库,并使用 UwAmp 创建了本地副本。在 MySQL Workbench 中它看起来很好,但是当我想将数据加载到我自己的 DGV 中时,它根本就不好。每个单元格
我有一个应用程序,它由一个 DataGridView 和一些按钮组成,可以更轻松地管理它(它是关于管理健身房订阅的)。我像这样将行添加到 DataGridView。 DataTable dataTab
设置:我有两个 DataGridView,每个都绑定(bind)到自定义业务对象的 BindingList<>。这些网格有一个特殊的行,其中包含该网格中所有行的数学总和——这个特殊的行反射(refle
我有一个 DataBound DGV 它有 3 个 Columns 即 ID(not pk), 名称 和状态。我有 2 个按钮 Add 和 Post。添加,将 Data 添加到 DGV 和 DataB
我是一名优秀的程序员,十分优秀!