【问题标题】:how to lock check items in listview如何锁定列表视图中的检查项目
【发布时间】:2015-03-03 21:06:39
【问题描述】:

代码很完美,但我如何才能在列表视图中锁定检查项目(仅需要的项目)?

        lvFees.Columns.Add("Fee", 120)
    lvFees.Columns.Add("Amount", 76)
    connect()
    rec.Open("select * from tablePayments where sem='" & cboSem.Text & "'", con, 3, 3)
    If rec.RecordCount <> 0 Then
        Dim i As Integer = 0
        Do Until rec.EOF
            lvFees.Items.Add(rec("payname").Value)
            lvFees.Items(i).SubItems.Add(rec("amount").Value)
            If rec("paytype").Value = "REQUIRED" Then ' the paytype has two options, the "REQUIRED" and OPTIONAL.
                lvFees.Items(i).Checked = True
            End If
            rec.MoveNext()
            i = i + 1
        Loop
    End If
    rec.Close()
    con.Close()

我想锁定所有必需项目的检查,同时让用户检查和取消选中可选项目

【问题讨论】:

  • 您的代码并不完美。您容易受到 sql 注入的攻击。更好地在该查询字符串上使用参数。如果那是 DAO,你最好使用 ado.net。
  • 对不起,我指的完美一词是,我的代码没有错误,它运行完美,但我只需要锁定选中的项目,这样用户就不会取消选中必填项。

标签: vb.net listview


【解决方案1】:

我确信有实现此目的的较低级别的方法,例如通过继承 ListView 类并覆盖它的某些行为,但对于更简单的方法,您可以简单地强制 ItemChecked 中的值事件。您可以使用列表中每个项目的Tag 属性来跟踪其“锁定”值。例如,如果你加载了一个ListView 控件,其中包含如下三个项目:

ListView1.Items.Add("Unlocked")
ListView1.Items.Add("Locked On").Tag = True
ListView1.Items(1).Checked = True
ListView1.Items.Add("Locked Off").Tag = False

然后将这样的代码放入ItemChecked事件处理程序中:

Private Sub ListView1_ItemChecked(sender As Object, e As ItemCheckedEventArgs) Handles ListView1.ItemChecked
    If e.Item.Tag IsNot Nothing Then
        e.Item.Checked = DirectCast(e.Item.Tag, Boolean)
    End If
End Sub

这使得用户可以更改第一项的复选框,但其他两项被锁定在各自的状态。

【讨论】:

  • 我需要研究一下如何使用标签属性,谢谢先生。
  • 您不需要使用Tag 属性。您可以通过查找原始数据源中的值或Dictionary 或基于单击的任何项目的方法来完成相同的事情,但Tag 属性对于一个简单的示例来说是最方便的事情.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 2014-11-05
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多