2013-07-17 4 views
1

У меня есть большая форма DetailsView для вставки в базу данных, и у меня есть много (10+) полей. Многие из них не видны, потому что мы не хотим, чтобы эти поля активировались, пока не были представлены данные (но могут быть активированы в будущем).DetailsView Вставить значение по умолчанию для флажков

Как установить значение по умолчанию для всех флажков сперва на «false» (непроверено)? На данный момент они вставляются как нули, и это не слишком хорошо сочетается со всем остальным.

До сих пор у меня есть этот код позади работают как onDataBound событие для DetailsView:

Dim row As DetailsViewRow 
    For Each row In DetailsView1A.Rows 
     If row.Cells.GetType() = GetType(CheckBox) Then 
      Dim tempCheckbox As CheckBox = CType(row.Cells(1).Controls(0), CheckBox) 
      If tempCheckbox Is DBNull.Value Then 
       tempCheckbox.Checked = False 
      End If 
     End If 
    Next 

Однако все флажки все еще представляемые в нулях. Что я делаю не так?

+0

Что произойдет, если вы удалите 'If tempCheckbox Is DBNull.Value Then ' condition? – jadarnel27

+0

@ jadarnel27 Я просто пробовал это, тоже не работает. Что делать, если я установил все флажки на странице с помощью Visible = 'true'. Тем не менее, я не хочу, чтобы эти поля были там, но те, которые остаются скрытыми, остаются нулевыми. – user2516794

+0

Это не ответ программирования, но вы можете просто установить значение по умолчанию для этих конкретных столбцов на false в пределах конкретной используемой СУБД (предположительно) SQL Server. Таким образом, если значение не указано, вы получите «false». – jadarnel27

ответ

0

Попробуйте обработать событие ItemInserting и обновить коллекцию «Ценности» объекта DetailsViewInsertEventArgs. Это значения, которые будут переданы в инструкцию insert в источнике данных.

Пройдите и обновите запись «Значения» для каждого из этих скрытых столбцов CheckBox до False. Вот пример:

Sub CustomerDetail_ItemInserting(ByVal sender As Object, ByVal e As DetailsViewInsertEventArgs) 
    e.Values("yourFieldName") = False 
End Sub 

Обратите внимание, что «yourFieldName» будет имя столбца в источнике данных, к которому подключен DetailsView.

Кроме того, Ложное может потребоваться быть строка, я не знаю, как это на самом деле получает прошло:

e.Values("yourFieldName") = "False" 

одна мысль: если выше не работает (по какой-то причине те скрытые CheckBoxes не имеют записей в коллекции Values), я бы просто не скрывал их на стороне сервера - скрыть их с помощью CSS или JavaScript. Другими словами, вместо того, чтобы иметь Visible="False" на вашем CheckBox, используйте свойство CSS display:none.

+0

Завтра я попробую это первое. Есть ли все равно, чтобы итерации через DetailsView? Лучше прокрутить, проверить, установлен ли элемент управления, и если да, то его значение равно null, а затем установите значение false. Это займет меньше времени после моего ухода в случае, если им не нужно вручную удалять строки, если они хотят активировать определенные поля. Спасибо за помощь! – user2516794

+0

@ user2516794 Разве это сработало для вас? FYI - вы, вероятно, можете * сделать что-то вроде того, что вы описали, но в этом контексте это будет смешно. Вы бы хотели поставить тот же цикл, который у вас есть, в свой вопрос внутри этого Sub, который я написал. Затем, внутри этого цикла, проверьте значения на видимые CheckBoxes, которые вы найдете в своем цикле. Имеет ли это смысл? – jadarnel27