我们的用户体验团队不喜欢处理布尔值的复选框-他们想要一个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();
    }
}

09-26 08:16