我已经达成了关于如何在数据绑定的ComboBox中指示“未选择”的设计决策的时间。我希望将此应用于ComboBox需要它的所有未来事件。在数据绑定组合上不能将SelectedIndex设置为-1,也不能将SelectedValue设置为null。
通常建议的解决方案是向组合添加虚拟行,但是在不知道绑定到行的对象的情况下,组合不能以显示“未选择”消息的方式可靠地创建虚拟对象。我不想在数据源上添加另一个项目,因为这会破坏不使用虚拟对象的其他客户端的列表。
还有哪些其他选择?顺便说一句,我使用的是Telerik RadComboBox,但这种情况并非特定于Telerik控件。
答案 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