我有一个checkedlistbox,它是从我数据库中的表中的记录中填充的。我可以在表单加载时动态创建复选框,还可以在关闭时保存用户的选择。问题是如果在数据库中删除了一条记录,那么用户选择会发生变化,因为没有关于将它们绑定到表上主键的checkedlistbox项目。我将用户的选择存储为arraylist集合类型用户设置。
如何同时存储名称和主键,以便在数据库更改时,它不会影响用户的选择?
这是我的代码:
Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim conn As New ADODB.Connection()
Dim database As String = "mydatabase"
conn.CommandTimeout = 50400 '14 hours
conn.Open("Provider=myprovider;Data Source=myserver;Initial Catalog=" & database & ";Integrated Security=SSPI")
conn.CursorLocation = ADODB.CursorLocationEnum.adUseClient
Dim rs As New ADODB.Recordset()
Dim Sql As String
Sql = "SELECT ProcessID, ProcessName FROM mytable WHERE is_active = 1"
rs.Open(Sql, conn)
Dim cnt As Integer
If rs.BOF = True And rs.EOF = True Then
cnt = 0
Else
rs.MoveFirst()
cnt = rs.RecordCount
End If
Dim i As Integer
i = 0
While i < cnt
CheckedListBox1.Items.Add(rs.Fields(1).Value)
i = i + 1
rs.MoveNext()
End While
'get user settings
Me.email.Checked = My.Settings.email
Me.pop.Checked = My.Settings.pop
Dim index As Integer
For Each item As String In My.Settings.selectedlistbox
index = CheckedListBox1.Items.IndexOf(item)
If index = -1 Then
CheckedListBox1.SetItemChecked(item, True)
Else
CheckedListBox1.SetItemChecked(item, False)
End If
Next
End Sub
答案 0 :(得分:1)
使用简单的类并覆盖ToString函数:
Private Class ProcessItem
Public Property ProcessID As Integer = 0
Public Property ProcessName As String = String.Empty
Public Overrides Function ToString() As String
Return Me.ProcessName
End Function
End Class
然后您可以添加您的信息:
CheckedListBox1.Items.Add(New ProcessItem With { _
.ProcessID = rs.Fields(0).Value, _
.ProcessName = rs.Fields(1).Value})