2016-10-19 11 views
0

私は、次の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; 
} 
+0

例外が発生していることについて質問するときは、例外がどこで発生しているのかを明示する必要があります。 – GEEF

+2

FindByText(string)に%がありません –

+3

[NullReferenceExceptionとは何ですか?それを修正する方法は?](http://stackoverflow.com/questions/4660142/what-is-a-ヌルリファレンスの抜け方ややり方はどうすればいいですか?) –

答えて

2

ListItemCollection.FindByText方法は、完全な文字列を比較します。部分文字列はありません。したがって1010%と一致しません。下記の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; 
} 

このようなステートメントが過度に冗長であれば、他の束を使用します。あなたは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を使用してください。ディスカッションhereを参照してください。

関連する問題