2017-10-15 10 views
1

データベースのデータをComboBoxにバインドできますが、選択したインデックス値を保存しようとしている間にnull reference errorと表示されます。コンボボックスの選択したインデックスをC#ウィンドウアプリケーションでデータベースに保存できません

public Form1() 
{ 
    InitializeComponent(); 
} 

private void Form1_Load(object sender, EventArgs e) 
{ 
    BindPAId(); 
    getPartyAccType(); 
} 

private void btnAdd_Click(object sender, EventArgs e) 
{ 
    mode = "New"; 
    // getting error here 
    string AccTypeIndex = ddlAccountType.SelectedIndex.ToString(); 
} 

public void getPartyAccType() 
{ 
    // ddlAccountType.Items.Clear(); 
    PartyAccount objType = new PartyAccount(); 

    List<PartyAccount> ListType = objType.getAccountPartyType(); 
    ddlAccountType.DataSource = ListType; 
    ddlAccountType.ValueMember = "AccTypeId"; 
    ddlAccountType.DisplayMember = "AccType"; 

    ddlAccountType = null; 
    ListType = null; 
} 

screenshot

+1

なぜこの声明をお持ちですか? - ddlAccountType = null;これにより、ButtonClickイベントハンドラのSelectedIndexにアクセスすると、 'ddlAccountType'オブジェクトがnullになります。 – Dinny

+0

ddlAccountType = null;これを削除した後、インデックス値を取得していますが、なぜnullにするとコンボボックスのデータが表示されないのですか? –

+0

コンボボックスのデータバインディングは完全で、コントロールはnullに設定する前にフォームにレンダリングされています。 – Dinny

答えて

1

あなた自身をnullするための基準を設定しているため、あなたがNullReferenceExceptionを得ている理由があります。問題は、あなたのgetPartyAccType内にある:

public void getPartyAccType() 
{ 
    PartyAccount account = new PartyAccount(); 

    List<PartyAccount> accountPartyType = account.getAccountPartyType(); 
    ddlAccountType.DataSource = accountPartyType; 
    ddlAccountType.ValueMember = "AccTypeId"; 
    ddlAccountType.DisplayMember = "AccType"; 

    //ddlAccountType = null; 
    //accountPartyType = null; 
} 

一切dllAccountTypenullする必要はありません。これをヌルにすると、コンポーネントへの参照が完全に削除されます。これは必要ではありません。また、nullaccountPartyType(コードにListType)変数を必要としない場合は、必要に応じて.NETガベージコレクタがオブジェクトをメモリから削除します。これを自分で行う必要はありません。

+0

DinnyとJevgeniの両方に返信してくれてありがとう、返事のために2番目のものを受け入れています。 –

関連する問題