2016-10-19 2 views
0

У меня есть следующий DropDownList:Как установить 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> 

Читаю значение списка из базы данных. Я получаю ссылку на объект, не установленную в экземпляр объекта Error. Это то, что я пробовал:

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

При задании вопроса об исключении, которое вы получаете, вам нужно четко указать * где * возникает исключение. – GEEF

+2

Вам не хватает% на FindByText (строка) –

+3

Возможный дубликат [Что такое исключение NullReferenceException и как его исправить?] (Http://stackoverflow.com/questions/4660142/what-is-a- NullReferenceException-и-как-делать-я-Fix-It) –

ответ

2

Метод ListItemCollection.FindByText сравнивает полные строки. Он не будет выполнять частичные строки. Таким образом, 10 не будет соответствовать 10%. См. Приведенную ниже цитату из MSDN:

Этот метод не выполняет частичный поиск или поиск по шаблону. Если элемент не найден в коллекции, используя этот критерий, возвращается null.

Поскольку нуль возвращается, то вы пытаетесь установить .Selected свойство верно, вы получите 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, если такие утверждения излишне подробные. Вы можете уменьшить его с помощью оператора 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, выяснить, какой объект является нулевым (это часто очевидно, глядя на строку кода, который бросает исключение), а затем выяснить, почему это нуль. Если это связано с чем-то, встроенным в .NET, то проверьте соответствующую документацию, чтобы убедиться, что вы понимаете, как она работает.

Кроме того, вы используете double по финансовым вопросам. Вы должны использовать decimal. См. Обсуждение here.

Смежные вопросы