2016-08-30 2 views
2

У меня есть флажки, которые необходимо привязать к DataTable. Проблема в том, что флажки хранят значения «ДА» и «НЕТ» в полях Oracle DB, а не Boolean. Как я могу привязать эти значения?Связанный флажок для Datatable с значениями YES/NO

Это не работает:

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

Я получаю сообщение об ошибке: "Строка не была признана в качестве действительного Boolean".

EDIT (Мой полный код):

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") 
+0

Возможно, вам понадобится создать свой класс флажков. Пара вещей. https://social.msdn.microsoft.com/Forums/windows/en-US/9ec1709f-4e06-4a77-8812-379d0d34a82c/checkbox-databinding-and-yn-values?forum=winformsdatacontrols –

+0

Спасибо, но как писать Класс checkbox, я никогда этого не делал? ... Извините, я начинающий VB.NET ... И это для C# Если не ошибаюсь. – LuckyLuke82

+0

в вашем SQL-select, вы можете создать версию bool: '" SELECT ... (IN_USE = 'YES') AS bInUse FROM ... "" Однако вам нужно будет установить/переключить реальный столбец в событии checkchanged. Что такое 'dtb'? – Plutonix

ответ

2

Поскольку вы только загрузка одной строки, я бы просто установить и извлечь его вручную:

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") это выражение приводит к boolean, который затем используется для установки 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") 

Это делает обратное: задает текст таблицы в «ДА» | «NO» в зависимости от проверяемого состояния.

В таблице должно быть область измерения формы (что неясно в вопросе), и вам нужно будет проверить, действительна ли таблица и имеются ли какие-либо строки в таблице (показано).


Если вы имели дело с несколькими строками в таблице, и, возможно, отображая его в DataGridView, вы могли бы сделать что-то очень похожее на CellFormatting и CellParsing событий, чтобы перевести туда и обратно из YES в True/Проверено.

Смежные вопросы