为什么下拉列表被分配了错误的值?
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();
我正在将 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();