使用文本文件记住CheckedListBox项的状态

时间:2018-04-27 08:16:20

标签: .net vb.net datagridview vb.net-2010 checkedlistbox

当我的文本文件中的字符串与CheckedListBox中的项匹配时,我正在编写代码以标记CheckedListBox的复选框。

Dim fl As String = s.ToString() + "\Script\" + "DB_NAME.txt"

If File.Exists(fl) Then
    If File.Exists(fl) Then
        Dim line As String
        Dim i As Integer

        Using reader As StreamReader = New StreamReader(s.ToString() + "\Script\" + "DB_NAME.txt")

            Do Until reader.Peek = -1
                line = reader.ReadLine

                'For Each Item As DataRowView In grd_tabledata.Items
                '    Dim text As String = Item(0).ToString()
                '    If (text = line) Then
                '        grd_tabledata.SetItemChecked(text, True)
                '    End If
                '    MsgBox(text)
                'Next

                Do While (i <= grd_tabledata.Items.Count)
                    If (CType(grd_tabledata.Items(i), String) = line) Then
                        grd_tabledata.SetItemChecked(i, True)
                    End If

                    'i = (i + 1)
                Loop
            Loop

        End Using

    End
End

但我收到的错误如下:

  

'从'DataRowView'类型转换为'String'类型无效。'

我想在该文件中存在相应条目时标记CheckedListBox项。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您想要使用文本文件记住 CheckedListBox 的状态。

我创建了一个虚拟解决方案,其中包含一个包含CheckedListBox(Form1)的Windows窗体(CheckedListBox1)和一个按钮(Button1),它根据更新CheckedListBox中的项目"DB_NAME.txt"文本文件中的内容。

enter image description here

<强> Form1中

enter image description here

<强> Form1.vb的

Imports System.IO

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles UpdateButton.Click

        Dim filename As String = "DB_NAME.txt"

        'Dim filename As String = s.ToString() + "\Script\" + "DB_NAME.txt"

        If Not File.Exists(filename) Then Return

        Using reader As StreamReader = New StreamReader(filename)
            Do Until reader.Peek = -1
                Dim line As String = reader.ReadLine

                For i As Integer = 0 To CheckedListBox1.Items.Count - 1
                    If (CheckedListBox1.Items(i).ToString = line) Then CheckedListBox1.SetItemChecked(i, True)
                Next
            Loop
        End Using
    End Sub
End Class

文本文件"DB_NAME.txt"的内容为:

item C
item D

最后,在运行时,点击“更新”按钮后,您会得到:

enter image description here

如果您仍然遇到问题,我建议您在虚拟解决方案中隔离问题并使用断点进行调试,以了解您正在使用的变量类型。

我相信您仍然会遇到异常,因为您正在调用对象中不存在的方法和属性。这可能是因为你认为这个对象属于给定类型,而不是。

答案 1 :(得分:0)

在您的代码中,只需使用以下代码替换Do to循环

For i=0 To grd_tabledata.Items.count -1
    If (CType(grd_tabledata.Items(i), String) = line) Then
           grd_tabledata.SetItemChecked(i, True)
             Exit For
         End If 
 Next