Member 14127874 Ответов: 1

Как сохранить идентификаторы в выбранных флажках да или нет ?


У меня есть 45 пунктов, которые имеют флажки " да " или "нет". Мне нужно сохранить идентификатор и флажки, которые были проверены Пользователем в базе данных.

Пример:
1 ID : Big yes[] no[]
2 ID : Hard [] no[]

и так далее до 45 ID.

У меня проблема с этим кодом! Пожалуйста, помогите!

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

For Each c As Control In Panel1.Controls
            For Each c1 As Control In Panel2.Controls
                If TypeOf c Is CheckBox Then
                    If TypeOf c1 Is CheckBox Then
                        If CType(c, CheckBox).Checked Then
                            If CType(c1, CheckBox).Checked Then
                                Dim constring As String = "data source=DESKTOP-9NE9FIF\SQLEXPRESS;initial catalog=Sample1;Integrated Security=True"
                                Using con As New SqlConnection(constring)
                                    Using cmd As New SqlCommand("INSERT INTO array_tbl(array_id,Answer) VALUES(@id,@answer)", con)
                                        cmd.Parameters.AddWithValue("@id", lbl)

                                        cmd.Parameters.AddWithValue("@answer", chk)

                                        con.Open()
                                        cmd.ExecuteNonQuery()
                                    End Using
                                End Using

                            End If
                        End If
                    End If

                End If

            Next
        Next

Maciej Los

I'm having a problem with this code! Please help!
это совсем не описательно!
Какие у вас проблемы? Пожалуйста, будьте более конкретны и предоставьте более подробную информацию о вашей проблеме.

Member 14127874

Спасибо за редактирование .

Member 14127874

Я хочу вставить идентификатор, а также ответ пользователя на флажки в одной кнопке.

Maciej Los

Пожалуйста, используйте виджет "ответить", чтобы сообщить мне (или кому-либо еще) о вашем ответе. Наведите курсор на мой комментарий, и вы увидите виджет "ответ" в правой части моего логина.

Кстати: Ваш вопрос все еще неясен, потому что мы не знаем, какой ответ вы хотите сохранить (да или нет или только проверено?). Какое поле вы используете на уровне базы данных для хранения такой информации?

Member 14127874

sql server - это моя база данных.

Member 14127874

sql server 2017

Maciej Los

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

CHill60

Почему вы проходите через элементы управления Panel2 каждый раз, когда смотрите на элемент управления Panel1?
Где же флажки? (Панель1 и Панель2 или как?)
Вероятно, вы получаете сообщение об ошибке, которое говорит, что у вас уже есть запись для этого идентификатора.
Каково содержание переменной lbl - вы не обновляете его в циклах, так что он всегда будет одним и тем же

Member 14127874

panel1 сохраняет флажок да или нет, в то время как panel2 сохраняет идентификаторы.

Member 14127874

Разве это неправильно ?

CHill60

Да.Пройдите через каждую панель только один раз

Member 14127874

Dim lbl предназначен для идентификации личности

CHill60

Но вы никогда ничего ему не приписываете

Member 14127874

Я его туда не включал.

Member 14127874

Но я ставлю lbl = 1
lbl=2

и так далее.

CHill60

Нет, в коде, который вы опубликовали, вы этого не делаете - вы обходите цикл внутри цикла с тем же значением lbl. И вы до сих пор не сказали нам в чем ошибка

ErrorMadness

Попробуйте эту ссылку:
https://www.codeproject.com/Answers/1275460/How-to-save-the-checkboxes-that-is-beeing-checked#answer1

CHill60

Это не поможет нашей операции. Основная проблема заключается в том, что они не знают, что они делают, и не знают разницы между ярлыками и флажками или как флажки должны работать. Излишнее размещение элементов управления на панелях фактически ухудшает ситуацию.

Member 14127874

А как насчет удостоверения личности?

Например, вопрос 1 имеет идентификатор 1, затем вопрос 2 имеет идентификатор два и так далее до вопроса 45. Как мне включить его туда ?

CHill60

Я включил идентификаторы в свое решение. Если вы хотите чтобы они были видны включите их в текст

Member 14127874

Спасибо за вашу помощь.

1 Ответов

Рейтинг:
6

CHill60

Вам нужно переосмыслить это от элементов управления вверх.

- У вас, кажется, есть метка, например, метка 1 с подписью "Большой" - они содержатся в панели 2
- Тогда у вас есть два флажка : да[] и нет [], и они находятся на панели 1 - но у вас нет никакого способа сопоставить их.

1. Не создавайте форму таким образом. Там нет необходимости в 2-х панелях. Вероятно, нет никакой необходимости в каких - либо панелях вообще-за исключением того, что прокручиваемая панель облегчает жизнь пользователю.

2. Большинство людей приняли бы флажок, который установлен (отмечен) как означающий "да", и снят (не отмечен) как означающий "нет" - так что вам не нужно два флажка на вопрос, только один (если вы сделаете это по-своему, вы оттолкнете своих пользователей, вероятно, заставите их пойти в другое место или потеряете отметки на вашем задании)

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

4. Итак, для этого сценария

1 ID : Big yes[] no[]
2 ID : Hard [] no[]
Вам не нужны две метки, 2 флажка "да" и 2 флажка "нет", все, что вам нужно, - это два флажка.
Напр.
Checkbox #1 : 
Name : chkQuestion1 (although chkBig would be better)
Text : "Big?"
Tag  : 1

Checkbox #2 :
Name : chkQuestion2 (chkHard better)
Text : "Hard?"
Tag  : 2

Видеть это Tag свойство (ссылка здесь[^] ). Это действительно полезно
Метка:
Возвращает или задает объект, содержащий данные об элементе управления.
В этом случае я установил для него целочисленное значение 1, 2 и т. д., равное 45, которое я могу использовать позже при записи в базу данных. Для обновления базы данных это выглядит примерно так .. (NB непроверено и не скомпилировано)
Dim constring As String = "data source=DESKTOP-9NE9FIF\SQLEXPRESS;initial catalog=Sample1;Integrated Security=True"
Dim cmdString As String = "INSERT INTO array_tbl(array_id,Answer) VALUES(@id,@answer)"

Using con As New SqlConnection(constring)
	
	con.Open()
	For Each c As Control In Panel1.Controls
		If TypeOf c Is CheckBox Then
			Dim chk As CheckBox = Ctype(c, CheckBox)
			Using cmd As New SqlCommand(cmdString, con)
				cmd.Parameters.AddWithValue("@id", Convert.ToInt32(chk.Tag))
				cmd.Parameters.AddWithValue("@answer", chk.Checked)
				cmd.ExecuteNonQuery()
			End Using
		End If
	Next
End Using


Maciej Los

5ed!