Member 13299675 Ответов: 3

Как сохранить значение флажка трех состояний в базе данных.


у меня есть один вид сетки, и он содержит столбец флажка, а столбец флажка имеет три состояния, и я хочу сохранить значение флажка в базе данных. если флажок установлен, то значение "присутствует" или наполовину установлено, то значение " наполовину оставлено "или же значение"отсутствует". пожалуйста помочь.
ниже приведен код, который я пишу на кнопке Сохранить
Private Sub btnsave_Click(sender As System.Object, e As System.EventArgs) Handles btnsave.Click
        Dim cmd As New OleDbCommand
        grdchk = IIf(CheckState.Checked, "Present", "Absent")
        cmd.Connection = cn
        cmd.CommandText = "insert into attandance values(@emp id,@fname,@designation,@attandance)"
        cmd.CommandType = CommandType.Text
        Dim adapFam As New OleDbDataAdapter
        For i As Integer = 0 To grd.Rows.Count - 1
            cmd.Parameters.AddWithValue("@emp id", grd.Rows(i).Cells(0).Value.ToString())
            cmd.Parameters.AddWithValue("@fname", grd.Rows(i).Cells(1).Value.ToString())
            cmd.Parameters.AddWithValue("@designation", grd.Rows(i).Cells(2).Value.ToString())
            cmd.Parameters.AddWithValue("@attandance", grd.Rows(i).Cells(3).Value.ToString())
            cmd.Connection = cn
            cmd.ExecuteNonQuery()
            adapFam.InsertCommand.ExecuteNonQuery()

        Next
        MessageBox.Show("Successfully saved", "Inventory", MessageBoxButtons.OK, MessageBoxIcon.Information)

    End Sub


Что я уже пробовал:

я устал IIF но это не работает

3 Ответов

Рейтинг:
2

RickZeeland

Вероятно, вам придется проделать большую работу, чтобы подготовить столбец checkbox.
Смотрите пример здесь: DataGridViewCheckBoxColumn.Свойство ThreeState (System.Окна.Формы)[^]


Рейтинг:
2

Kornfeld Eliyahu Peter

Немного о 3-м состоянии чекбокса...
Флажок может иметь только два значения-вкл. или выкл., и это по замыслу, однако когда вы привязываете флажок к полю базы данных, которое может быть обнулено, вы можете запутаться в визуальном представлении этого нулевого значения (изначально аналогичного непроверенному). Поэтому некоторым пришла в голову идея ввести 3-е состояние (серое), чтобы визуализировать нулевое значение как нечто отличное от непроверенного... Во многих случаях он используется, когда флажок является обязательным...
Чтобы добавить это-встроенный флажок не имеет функции выбора 3-го состояния через пользовательский интерфейс (по всем причинам), поэтому вам придется написать свою собственную обработку этого состояния...
Так что, в конце концов, это может быть не идеальный пользовательский интерфейс для вас...
Однако... Это выполнимо...
Но вы не можете проверить проверенное свойство в 3-х состояниях флажка, но вы должны использовать Состояния checkstate[^] вместо этого свойство (и управлять им из кода)...


Рейтинг:
1

Wendelius

Не уверен, правильно ли я понял ваш вопрос, но если третье состояние NULL в этом флажке вы должны преобразовать значение в DBNull при сохранении в базу данных.

Есть в Значение dbnull.Поле Значения (Система)[^]

Поэтому в вашем коде, когда значение флажка неопределенно, установите значение в базе данных в DBNull, в противном случае используйте значение флажка.

В качестве примечания я бы предложил использовать логическое значение или 0/1 в качестве значения для сохранения в базе данных, а не строковое представление.