Asp.net 数据绑定上的默认值为空

Asp.net 数据绑定上的默认值为空,asp.net,data-binding,Asp.net,Data Binding,我正在将一个可为空的布尔列绑定到一个复选框。 如果列为null,我如何将复选框默认为选中,如果存在则保留真/假值 <asp:CheckBox ID="boolCheckBox" runat="server" Checked='<%# Bind("MyBoolColumn") %>' 不确定这是否可行,但试一试: <%# If(Bind("MyBoolColumn") Is Nothing, True, Bind("MyBoolColumn")) %> 您可以在

我正在将一个可为空的布尔列绑定到一个复选框。 如果列为null,我如何将复选框默认为选中,如果存在则保留真/假值

<asp:CheckBox ID="boolCheckBox" runat="server" Checked='<%# Bind("MyBoolColumn") %>' 

不确定这是否可行,但试一试:

<%# If(Bind("MyBoolColumn") Is Nothing, True, Bind("MyBoolColumn")) %>

您可以在数据库级别执行。大概是这样的:

SELECT 
MyBooleanColumn = 
Case 
When MyBooleanColumn Is Null Then 1 
Else MyBooleanColumn End
FROM YourTable
试试这个:

<asp:CheckBox ID="boolCheckBox" runat="server" "<%# (Bind("MyBoolColumn") == null? "Checked='checked'" : null %>">

您可以在模型中添加一个只有getter的属性:

public class SomeClass
{
    public bool? MyBoolColumn { get; set; }
    public bool MyBoolColumnChecked
    {
        get { return MyBoolColumn ?? true; }
    }
}
然后绑定到新属性

Checked='<%# Bind("MyBoolColumnChecked") %>'
Checked=''

与Eval不同的是,显然,除了使用字符串格式外,您无法使用Bind:

Bind(“MyColumn”,“{0:c}”)

我找到的解决方案是使用ItemCreated事件

        protected void myListView_OnItemCreated(object sender, ListViewItemEventArgs e)
    {
        if (e.Item.ItemType == ListViewItemType.InsertItem)
        {
            ((CheckBox)((ListView)sender).InsertItem.FindControl("MyCheckBox")).Checked = true;
        }
    }

没错,但通常在db级别执行类似操作以影响UI问题会产生其他问题。最好是更接近其使用情况进行评估。