[英]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.