我们的用户体验团队不喜欢处理布尔值的复选框-他们想要一个asp:dropdownlist,其中有两个选项用于true/false。
我的bool必须使用绑定,因为它在asp:gridview的编辑模板中。
这是我的代码:
<asp:GridView ...>
...
<Columns>
...
<asp:TemplateField ...>
...
<EditItemTemplate>
<asp:DropDownList ID="ExcludedDropDown" runat="server" SelectedValue='<%# Bind("IsExcluded") %>'>
<asp:ListItem Value="false" Text="Include" meta:resourcekey="ListItemResource0"></asp:ListItem>
<asp:ListItem Value="true" Text="Exclude" meta:resourcekey="ListItemResource1"></asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
...
</Columns>
</asp:GridView>
在edititemtemplate中有一个断点,我尝试在即时窗口中执行以下操作:
Eval("Exclude")
false
其中“假”是评估的结果。为了更好地衡量,我确实尝试将“true”项的值更改为:“true”、“t”、“t”、“y”、“y”、“-1”、“0”、“1”、“”
所有人都有同样的例外:
“DROPPDROWLIST”有一个无效的选择值,因为它不存在于项目列表中。
我试着使用“ondatabinding”事件,但这对我毫无帮助(也许我只是做错了)。
我不希望在类中添加将bool转换为字符串/整数的属性(因为这会立即生效)。
是否不可能将bool绑定到dropdownlist?如果是,为什么在asp.net中有这个限制?在dropdownlist中很难看出支持整数和布尔值之间的区别。
最佳答案
我把listitem的值从capital(true false)开始更改,它工作得很好。你可能想试试。
<asp:DropDownList ID="ExcludedDropDown" runat="server"
SelectedValue='<%# Bind("IsExcluded") %>'>
<asp:ListItem Value="True" Text="Include"></asp:ListItem>
<asp:ListItem Value="False" Text="Exclude"></asp:ListItem>
</asp:DropDownList>
我是这样测试的
public class Something
{
public string Some { get; set; }
public bool IsExcluded { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
var collections = new List<Something>
{
new Something {Some = "One", IsExcluded = true},
new Something {Some = "Two", IsExcluded = false},
};
GridView1.DataSource = collections;
GridView1.DataBind();
}
}