oracle 使用YES/NO值将复选框绑定到数据表

c0vxltue  于 2023-05-16  发布在  Oracle
关注(0)|答案(2)|浏览(107)

我有一些需要绑定到DataTable的复选框。问题是复选框在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")
i34xakig

i34xakig1#

因为你只是加载一行,我只需要手动设置和获取它:

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
然后在check changed事件中:

' 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")

这是相反的:将表格文本设置为“是”|“否”取决于检查状态。
表必须具有 * 表单级别范围 *(在问题中不清楚),您需要检查表是否有效,以及表中是否有任何行(如图所示)。
如果您正在处理表中的多行,并且可能将其显示在DataGridView中,则可以在CellFormattingCellParsing事件中执行非常类似的操作,以将YES来回转换为True/Checked。

lymnna71

lymnna712#

另一个答案:

Dim IN_USE_Bind = New Binding("Checked", dtb, "IN_USE", True)
'Transform coming from dtb to ChkInUse
AddHandler IN_USE_Bind.Format, Sub(o, c) c.Value = (c.Value = "YES") 'Don t care about NO
'Transform coming from ChkInUse to dtb
AddHandler IN_USE_Bind.Parse, Sub(o, c) c.Value = If(c.Value, "YES", "NO")
'ChkInUse.DataBindings.Clear()
ChkInUse.DataBindings.Add(IN_USE_Bind)

相关问题