2013-07-17 94 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