【问题标题】:Binding checkbox to Datatable with YES/NO values使用 YES/NO 值将复选框绑定到 Datatable
【发布时间】:2016-09-03 01:35:28
【问题描述】:

我有需要绑定到数据表的复选框。问题是复选框在 Oracle DB 字段中存储“YES”和“NO”值,而不是布尔值。如何绑定到这些值?

这不起作用:

ChkInUse.DataBindings.Add("Checked", dtb, "IN_USE")

我收到错误:“字符串未被识别为有效的布尔值”。

编辑(我的完整代码):

    Dim SQL As String = "SELECT * from MyTable WHERE ID=" & Form1.DataGridView1.CurrentRow.Cells(0).Value.ToString

    Dim dtb As New DataTable()

   Using con As OracleConnection = New OracleConnection("Data Source=MyDB;User Id=Lucky;Password=MyPassword;")

        Try

            con.Open()

            Using dad As New OracleDataAdapter(SQL, con)
                dad.Fill(dtb)
            End Using

     ChkInUse.DataBindings.Add("Checked", dtb, "IN_USE")

【问题讨论】:

  • 认为您可能需要创建复选框类。有几件事。 social.msdn.microsoft.com/Forums/windows/en-US/…
  • 谢谢,但是如何编写 Checkbox 类,我从来没有这样做过?...对不起,我是 VB.NET 初学者...如果没记错的话,这是针对 C# 的。
  • 在您的 SQL 选择中,您可以创建一个布尔版本:"SELECT ... (IN_USE = 'YES') AS bInUse FROM..." 不过,您必须在 checkchanged 事件中设置/切换真实列。 dtb 是什么?
  • 是的,考虑一下,我会接受 Plutonix 的建议。只需循环数据表中的每一行并将列更新为 1/0,具体取决于它是/否,那么它应该使用您已经正确拥有的代码进行绑定。 :) 像这样对于每一行 As DataRow in dad.Rows If row("IN_USE") = "Yes" Then row("IN_USE") = "1" Else row("IN_USE") = "0" End If Next
  • 好的。而不是使用 1 和 0 使用 "True" 和 "False" - 这就是我得到它的方式,我已经让它在我的解决方案中工作:)

标签: .net vb.net oracle checkbox


【解决方案1】:

由于您只是加载一行,我将手动设置和获取它:

dad.Fill(dtb)
' set the check
chkInUse.Checked = (dtb.Rows(0).Field(Of String)("IN_USE") = "YES")

(dtb.Rows(0).Field(Of String)("IN_USE") = "YES") 是一个产生布尔值的表达式,然后用于设置CheckState

然后在检查更改事件中:

' early exit if there is no datatable yet or no rows
If dtb Is Nothing OrElse dtb.Rows.Count < 1 Then Return
dtb.Rows(0)("INUSE") = If(chkInUse.Checked, "YES", "NO")

这反过来:根据选中状态将表格文本设置为“YES”|“NO”。

表格必须具有表单级别范围(问题中并不清楚),您需要检查表格是否有效以及表格中是否有任何行(如图所示)。


如果您正在处理表格中的多行并且可能在DataGridView 中显示它,您可以在CellFormattingCellParsing 事件中执行非常相似的操作,将YES 来回转换为True /已检查。

【讨论】:

    猜你喜欢
    • 2014-08-07
    • 1970-01-01
    • 2019-10-14
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多