ComboBox中的虚拟物品

时间:2009-04-16 21:27:33

标签: user-interface

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

通常建议的解决方案是向组合添加虚拟行,但是在不知道绑定到行的对象的情况下,组合不能以显示“未选择”消息的方式可靠地创建虚拟对象。我不想在数据源上添加另一个项目,因为这会破坏不使用虚拟对象的其他客户端的列表。

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

4 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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


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

答案 3 :(得分:0)

IMO这是数据绑定在其表面上不平衡的地方。在非数据绑定控件上,这非常简单 - 只需在手动添加其他项之前将虚拟项添加到组合框中。

为了可靠地对数据绑定的所有类型的组合框执行此操作,您需要将项目添加到数据集中 - 这违反了数据绑定应该首先为您带来的表示和功能的分离。< / p>

通常,数据绑定可以节省您的时间。当你开始黑客攻击以克服数据绑定的缺点时,你就不再节省时间了。

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

/ Rant over