如何从代码后面设置下拉列表

本文关键字:设置 下拉列表 代码 | 更新日期: 2023-09-27 18:13:54

我有以下下拉列表:

<asp:DropDownList ID="commission" class="form-control" runat="server">
    <asp:ListItem Enabled="true" Text="Select Commission" Value="-1"></asp:ListItem>
    <asp:ListItem Text="10%" Value="0.1"></asp:ListItem>
    <asp:ListItem Text="15%" Value="0.15"></asp:ListItem>
    <asp:ListItem Text="20%" Value="0.20"></asp:ListItem>
    <asp:ListItem Text="25%" Value="0.25"></asp:ListItem>
</asp:DropDownList>

我正在从数据库读取下拉列表的值。我得到的对象引用没有设置为对象错误的实例。这是我尝试过的:

double com = reader.GetDouble(6);
if (com == 0.1)
{
    commission.Items.FindByText("10").Selected = true; // I get the exeption here
}
else if (com == 0.15)
{
    commission.Items.FindByText("15").Selected = true;
}
else if (com == 0.2)
{
    commission.Items.FindByText("20").Selected = true;
}
else if (com == 0.25)
{
    commission.Items.FindByText("25").Selected = true;
}

如何从代码后面设置下拉列表

listtitemcollection。FindByText方法比较完整字符串。它不会处理部分字符串。所以10不匹配10%。请参阅下面来自MSDN的引用:

此方法不执行部分搜索或通配符搜索。如果使用此条件在集合中未找到项,则返回null。

由于返回null,然后您尝试将.Selected属性设置为true,您将收到NullReferenceException。解决方案很简单,将%添加到字符串中。

double com = reader.GetDouble(6);
if (com == 0.1)
{
    commission.Items.FindByText("10%").Selected = true;
}
else if (com == 0.15)
{
    commission.Items.FindByText("15%").Selected = true;
}
else if (com == 0.2)
{
    commission.Items.FindByText("20%").Selected = true;
}
else if (com == 0.25)
{
    commission.Items.FindByText("25%").Selected = true;
}

使用一堆像这样的else if语句是过于冗长的。您可以使用switch语句缩小它。

switch(com)
{
    case 0.1:  commission.Items.FindByText("10%").Selected = true; break;
    case 0.15: commission.Items.FindByText("15%").Selected = true; break;
    case 0.2:  commission.Items.FindByText("20%").Selected = true; break;
    case 0.25: commission.Items.FindByText("25%").Selected = true; break;
}

还可以通过根据value查找来简化代码。

commision.Items.FindByValue(com).Selected = true;

将来,要解决NullReferenceException,要弄清楚哪个对象是空的(通常通过查看抛出异常的代码行可以明显看出),然后弄清楚为什么它是空的。如果它涉及到内建在。net中的东西,那么检查相关文档以确保您了解它是如何工作的。

而且,你似乎在财务问题上使用double。您应该使用decimal