2013-07-17 129 views
1

我有一個大的DetailsView表單插入到數據庫,我有很多(10+)複選框字段。其中許多不可見,因爲我們不希望那些激活的字段提交數據(但可能會在將來激活)。DetailsView爲複選框插入默認值

如何將所有複選框的默認值設置爲「false」(未選中)?截至目前,它們被插入爲空值,並且與其他所有東西都不太匹配。

到目前爲止,我有後面跑作爲DetailsView控件的onDataBound事件驗證碼:

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是DBNull.Value然後 '條件會發生什麼情況? – jadarnel27

+0

@ jadarnel27我只是試過,也不管用。如果我將所有複選框放入Visible ='true'的頁面,那麼工作起到什麼作用呢?但是,我不希望這些字段仍然存在,但仍然隱藏的字段保留爲空。 – user2516794

+0

這不是一個編程答案,但您可以在特定的RDBMS中將這些特定列的默認值設置爲false(假設爲SQL Server)。這樣,如果沒有指定任何值,則最終會顯示「false」。 – jadarnel27

回答

0

嘗試處理ItemInserting事件,並更新DetailsViewInsertEventArgs對象的「Values」集合。這些是將傳遞給您的數據源的插入語句的值。

檢查並更新每個隱藏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隱藏它們。換句話說,您的CheckBox上不使用Visible="False",而是使用CSS屬性display:none

+0

明天我會試試這個第一件事。無論如何,迭代通過DetailsView雖然?最好循環,檢查控件是否爲複選框,如果是,則爲null,然後設置爲false。我離開後需要較少的維護,以便他們不必手動刪除行,如果他們想要激活某些領域。感謝所有的幫助! – user2516794

+0

@ user2516794這是否適合您?僅供參考 - 您可能*會做類似於您所描述的內容,但在這種情況下它會很時髦。你會想把你在問題中的相同循環放在我寫的Sub中。然後,在該循環內,檢查您在循環中找到的可見CheckBox的值。那有意義嗎? – jadarnel27