User interface 组合框中的虚拟项

User interface 组合框中的虚拟项,user-interface,User Interface,对于如何在数据绑定组合框中指示“未选择”,我已经到了设计决策的时候了。我希望将此应用于组合框需要此功能的所有未来事件。不能在数据绑定组合中将SelectedIndex设置为-1,也不能将SelectedValue设置为null 通常建议的解决方案是向组合添加虚拟行,但如果不知道绑定到行的对象,组合就无法可靠地创建虚拟对象,从而显示“未选择”消息。我不想在数据源上添加另一项,因为这会影响不使用虚拟对象的其他客户端的列表 还有什么其他选择?顺便说一句,我使用的是Telerik RadComboBox

对于如何在数据绑定组合框中指示“未选择”,我已经到了设计决策的时候了。我希望将此应用于组合框需要此功能的所有未来事件。不能在数据绑定组合中将SelectedIndex设置为-1,也不能将SelectedValue设置为null

通常建议的解决方案是向组合添加虚拟行,但如果不知道绑定到行的对象,组合就无法可靠地创建虚拟对象,从而显示“未选择”消息。我不想在数据源上添加另一项,因为这会影响不使用虚拟对象的其他客户端的列表

还有什么其他选择?顺便说一句,我使用的是Telerik RadComboBox,但这种情况并不特定于Telerik控件。

您可以在标记中定义“空项”,并附加任何数据绑定项:

<asp:DropDownList DataSourceID="..." AppendDataBoundItems="true" ...>
    <asp:ListItem Value="-1" Text="None"></asp:ListItem>
</asp:DropDownList>

关键是指定AppendDataBoundItems=“true”将数据绑定项附加到直接在标记中指定的任何项


这适用于标准ASP.NET DropDownList,也适用于Telerik RadComboBox。

在数据绑定之前添加一个新项目,并设置AppendDataboundItems=true

 cbo.AppendDataboundItems = true;   
 cbo.Items.add(new ListItem("None", "-1");
 cbo.DataSource = x;
 cbo.DataBind();

希望我没有像ThickClient(窗口应用程序)中的AppendDataBoundItems这样的属性 最好在第0个索引中的数据源表中插入虚拟行

        DataRow dr = dtsource.NewRow();
        dr["username"] = "--New User---";
        dr["Userid"] = 0;


        dtsource.Rows.InsertAt ((dr),0); 
        cmbToUser.DataSource = dtsource;

在我看来,这正是数据绑定面临的问题。在非数据绑定控件上,这非常简单——只需在手动添加其他项之前将虚拟项添加到组合框中

为了可靠地使用数据绑定的所有类型的组合框,您需要将该项添加到数据集中——这违反了数据绑定首先应该为您带来的表示和功能的分离

通常情况下,数据绑定可以节省您的时间,直到某一点。当你开始破解一些东西来克服数据绑定的缺点时,你就不再节省时间了

我的建议通常是重新评估数据绑定是否是正确的解决方案


/Rant over

同样值得一提的是,如果您这样做(我建议:),并且希望将其作为必填字段。您可以在RequiredFieldValidator上指定
InitialValue=“-1”
属性