0

リストボックスのデータソースがリストであるリストボックスをバインドしました。リストボックスで選択したリスト項目の選択した値を取得するにはどうすればよいですか。サンプルコードは次のとおりです

        pdfList = attendanceDetailsPresenter.GetPredefinedDetails();
        this.lstCompanies.DataSource = pdfList;
        this.lstCompanies.DisplayMember = "CompanyName";
        this.lstCompanies.ValueMember = "CompID";

        this.lstDepartments.BindingContext = new BindingContext();
        this.lstDepartments.DataSource = pdfList;
        this.lstDepartments.DisplayMember = "DepartmentName";
        this.lstDepartments.ValueMember = "DeptID";

       if (lstCompanies.SelectedItems.Count < 0)
        {
            MessageBox.Show("Please Select Any one Company");
            return attendanceCalculationDetailsDataList;
        }
        else
        {
            for (int i = 0; i < lstCompanies.SelectedItems.Count; i++ )
            {
               attendanceCalculationDetailsData.CompanyID.Add(int.Parse(lstCompanies.SelectedValue.ToString()));
            }
        }

誰でも私の問題を解決できますか。

4

1 に答える 1

2

まず第一にCount、リストの が 0 未満になることはありません。いつも>= 0です。

次に、リストをデータバインドすると、通常、項目は型DataRowViewになります (アプリケーションをデバッグすることで確認できるはずです)。それが正しい場合は、選択した各項目をDataRowViewキャストしてから、そのRowプロパティの値を期待する型にキャストする必要があります。


次のループでは、選択した項目を使用していないことに気付きましたが、常にSelectedValue:

for (int i = 0; i < lstCompanies.SelectedItems.Count; i++ )
{
    attendanceCalculationDetailsData.CompanyID.Add(int.Parse(lstCompanies.SelectedValue.ToString()));
}

これを次のように変更してみてください。

for (int i = 0; i < lstCompanies.SelectedItems.Count; i++ )
{
    attendanceCalculationDetailsData.CompanyID.Add(((<WhatEverClassYouUse>)lstCompanies.SelectedItems[i]).CompanyID);
}

説明: リスト内の複数の項目が選択されている場合、それらの項目がSelectedItemsコレクションに追加されます。これらの項目を繰り返すことができます。DataRowView各項目は、 ( データが または にバインドされているDataTable場合DataView) またはコレクション内のクラスのオブジェクトになります。

が返すオブジェクトの型を教えてくれなかったのでGetPredefinedDetails、 に置き換えましたWhatEverClassYouUse。これを正しい型にキャストします。

于 2013-06-03T13:52:36.207 に答える