为什么下拉列表被分配了错误的值?

Why dropdownlist is getting assigned with wrong value?

我正在将 DataTable 返回的值分配给 dropdownlist,但它只选择第一个值 -1。为什么?

ddlBPS.SelectedValue = r["ServiceInfoInitialBPS"].ToString();

datatable和db里面ServiceInfoInitialBPS的值为6.

<asp:DropDownList ID="ddlBPS" runat="server" CssClass="form-control white">
                                                            <asp:ListItem Value="-1" Text="-Select-"></asp:ListItem>
                                                            <asp:ListItem Value="01" Text="01"></asp:ListItem>
                                                            <asp:ListItem Value="02" Text="02"></asp:ListItem>
                                                            <asp:ListItem Value="03" Text="03"></asp:ListItem>
                                                            <asp:ListItem Value="04" Text="04"></asp:ListItem>
                                                            <asp:ListItem Value="05" Text="05"></asp:ListItem>
                                                            <asp:ListItem Value="06" Text="06"></asp:ListItem>
                                                            <asp:ListItem Value="07" Text="07"></asp:ListItem>
                                                            <asp:ListItem Value="08" Text="08"></asp:ListItem>
                                                            <asp:ListItem Value="09" Text="09"></asp:ListItem>
                                                            <asp:ListItem Value="10" Text="10"></asp:ListItem>
                                                            <asp:ListItem Value="11" Text="11"></asp:ListItem>

                                                            <asp:ListItem Value="12" Text="12"></asp:ListItem>
                                                            <asp:ListItem Value="13" Text="13"></asp:ListItem>
                                                            <asp:ListItem Value="14" Text="14"></asp:ListItem>
                                                            <asp:ListItem Value="15" Text="15"></asp:ListItem>
                                                            <asp:ListItem Value="16" Text="16"></asp:ListItem>
                                                            <asp:ListItem Value="17" Text="17"></asp:ListItem>
                                                            <asp:ListItem Value="18" Text="18"></asp:ListItem>
                                                            <asp:ListItem Value="19" Text="19"></asp:ListItem>
                                                            <asp:ListItem Value="20" Text="20"></asp:ListItem>
                                                            <asp:ListItem Value="21" Text="21"></asp:ListItem>
                                                            <asp:ListItem Value="22" Text="22"></asp:ListItem>
                                                        </asp:DropDownList>

这是为什么?我已经调试了,但分配给它的值总是 -1.

我假设未找到值 6,因为您像 06 一样使用了前导零。如果它是一个回发,你会得到一个异常,但因为它是初始加载,所以没有(所以第一个)项目得到 "selected"。

MSDN:

ArgumentOutOfRangeException: The selected value is not in the list of available values and view state or other state has been loaded (a postback has been performed). For more information, see the Remarks section.

一种方法,用前导零填充:

ddlBPS.SelectedValue = r["ServiceInfoInitialBPS"].ToString().PadLeft(2, '0');

或(假设它是 int):

ddlBPS.SelectedValue = r.Field<int>("ServiceInfoInitialBPS").ToString("D2");

在来自 database 的值之前附加 "0"。这是一个 string 值而不是 int 所以它应该完全带有 value 选项。

ddlBPS.SelectedValue = "0" + r["ServiceInfoInitialBPS"].ToString();