簡體   English   中英

如何從后面的代碼設置dropdownlist?

[英]How to set dropdownlist from code behind?

我有以下DropDownList:

<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;
}

ListItemCollection.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;
}

這樣使用其他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;
}

還請注意,您可以通過根據值查找來簡化代碼。

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

將來,要解決NullReferenceException,請找出什么對象為null(通常通過查看引發該異常的代碼行來了解),然后找出其原因為null。 如果涉及到.NET中內置的內容,則請查看相關文檔以確保您了解其工作方式。

另外,您似乎在財務上使用了double 您應該使用decimal 請參閱此處的討論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM