Plz幫助
我使用Visual Studio 2017, sql server 2016 我的要求是根據checklistbox1的選定專案來填充checklistbox2 如果不勾選,則只洗掉其相關的專案,而不是全部
假設
Checkedlistbox1(contains Department)(fill all departments from sql) , checkedlistbox2 (Sub Department) fill only selected values from CheckedListBox1, if uncheck from checkedlistbox1 then remove 打開第三個Checkedlistbox3,其中包含子部門專案(只從Checkedlistbox2中獲取選中的值)
。預先感謝
uj5u.com熱心網友回復:
下面是一個將父表和子表DataTables系結到兩個CheckedListBox的例子,并根據第一個串列中選中的專案來過濾第二個串列:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase. 加載
Dim parentTable As New DataTable
With parentTable.Columns
.Add("ParentId"/span>, GetType(Integer)
.Add("ParentName", GetType(String)
結束 有
With parentTable.Rows
.Add(1, "Parent1")
.Add(2, "Parent2")
.Add(3, "Parent3")
結束 與
BindingSource1.DataSource = parentTable
With CheckedListBox1
.DataSource = BindingSource1
.DisplayMember = "ParentName"。
.ValueMember = "ParentId"End With[/span
Dim childTable As New DataTable
With childTable.Columns
.Add("ChildId"/span>, GetType(Integer)
.Add("ParentId"/span>, GetType(Integer)
.Add("ChildName", GetType(String)
結束 有
With childTable.Rows
.Add(1, 1, "Child1A" )
.Add(2, 1, "Child1B")
.Add(3, 1, "Child1C")
.Add(4, 2, "Child2A")
.Add(5, 2, "Child2B")
.Add(6, 2, "Child2C")
.Add(7, 3, "Child3A")
.Add(8, 3, "Child3B")
.Add(9, 3, "Child3C")
結束 與
BindingSource2.DataSource = childTable
BindingSource2.Filter = "ParentId = 0"。
With CheckedListBox2
.DataSource = BindingSource2
.DisplayMember = "ChildName""ChildId"End With[/span
End Sub
Private Sub CheckedListBox1_ItemCheck(sender As Object, e As ItemCheckEventArgs) Handles CheckedListBox1. 專案檢查
Dim checkedItems = CheckedListBox1.CheckedItems.Cast(Of DataRowView).ToList()
Dim currentItem = DirectCast(CheckedListBox1.Items(e.Index), DataRowView)
Ife.NewValue = CheckState.Checked Then
checkedItems.Add(currentItem)
Else[/span
checkedItems.Remove(currentItem)
End If
If checkedItems.Any() Then
BindingSource2.Filter = $"ParentId IN ({String.Join(", ", checkedItems.Select(Function(drv) drv.Row.Field(Of Integer)("ParentId)))}"/span>
Else
BindingSource2.Filter = "ParentId = 0"/span>
End If
End Sub
ItemCheck事件發生在專案的狀態改變之前,這就是為什么當前的專案必須被添加或從檢查的專案串列中洗掉。"ParentId = 0"過濾器用于確保在沒有檢查到父母的情況下,沒有孩子符合過濾器。
uj5u.com熱心網友回復:
我認為一種方法是在Not Me.IsPostBack內的Pageload上系結Checkedlistbox1。然后使用 Checkedlistbox1 的 SelectedIndexChanged 系結 Checkedlistbox2,然后可以重復 Checkedlistbox2 的 SelectedIndexChanged 系結 Checkedlistbox3。
在下面的例子中,我只是將專案值添加到一個整數串列中,然后你可以將其傳遞給你的Checkedlistbox2 & 3系結的SQL引數。
Private Sub Checkedlistbox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Checkedlistbox1. 選定索引改變
Dim cb2 As List(Of Integer) type">Integer) = (New List(Of Integer)
For Each item As ListItem In Checkedlistbox1.Items
If item.Selected Then
cb2.Add(item.Value)
End If
下一步 下一步
結束 子
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/325295.html
標籤:
