2

ComboBox である DataGridView に列があり、データを入力できません。私は自分のコードを何度も見てきましたが、正しいように見えますが、ComboBox が設定されていないため、そうではありません。

これが私のコードです。

まず、テスト用の静的 DataSource:

List<Phone> PhoneList = new List<Phone>();

Phone p1 = new Phone();
p1.PhoneID = 1;
p1.PhoneTypeID = 2;
p1.AreaCode = "333";
p1.Number = "123-1234";
p1.PhoneTypeName = "Primary";
PhoneList.Add( p1 );

Phone p2 = new Phone();
p2.PhoneID = 2;
p2.PhoneTypeID = 2;
p2.AreaCode = "444";
p2.Number = "432-8900";
p2.PhoneTypeName = "Secondary";
PhoneList.Add( p2 );

これは、ComboBox 列の DataPropertyName を表示するだけです。

this.dgvClinic.Columns[ "PhoneName" ].DataPropertyName = "PhoneID";

次に、データを取得し、その行ごとに DataGridView に行を追加し、新しく追加された行のセルにデータを入力します。最後に ComboBox 列があり、ご覧のとおり、DataSource、DisplayMember、および ValueMember プロパティを設定しています。セルの Item コレクションに静的な値を追加しようとしたため、最後の 3 行がコメントアウトされていることに注意してください。どちらのアプローチも機能しませんでした。最初の 3 つの列にはデータが含まれていますが、ComboBox セルにはデータが含まれていません。

Clinic c = new Clinic();
string CurrentLocation = string.Empty;
foreach ( Clinic i in c.SelfListAll() )
{
    Location_List_ByClinicResult l = i.Locations.FirstOrDefault<Location_List_ByClinicResult>();
    if ( l == null )
    {
        CurrentLocation = "12345 Main Street" + " " + "San Rafael" + ", " + "CA" + " " + "94903";
    }
    else
    {
        CurrentLocation = l.Address1 + " " + l.City + ", " + l.StateAbbrev + " " + l.Zip;
    }

    RowIndex = this.dgvClinic.Rows.Add();

    this.dgvClinic.Rows[ RowIndex ].Cells[ "ClinicID" ].Value = i.ClinicID.ToString();
    this.dgvClinic.Rows[ RowIndex ].Cells[ "ClinicName" ].Value = i.Name;
    this.dgvClinic.Rows[ RowIndex ].Cells[ "LocationName" ].Value = CurrentLocation;

    DataGridViewComboBoxCell cell = this.dgvClinic.Rows[ RowIndex ].Cells[ "PhoneName" ] as DataGridViewComboBoxCell;
    cell.DataSource = PhoneList;
    cell.DisplayMember = "Number";
    cell.ValueMember = "PhoneID";
    //cell.Items.Add( "One" );
    //cell.Items.Add( "Two" );
    //cell.Items.Add( "Three" );
}

ここで私が見逃しているものを誰かが見てくれることを本当に望んでいます。ちなみに、デザイナーで列を作成しました。

ありがとう。

4

2 に答える 2

0
cell.DataSource = PhoneList;
cell.DisplayMember = "Number";
cell.ValueMember = "PhoneID";

この部分を見ると、電話リストをデータソースとしてセルに設定していることがわかります。DisplayMemberおよびValueMemberプロパティは、 および の列を検索"Number""PhoneID"ますPhoneList。しかし、実際にはandPhoneListという列はなく、PhoneList の子 p1 と p2 にはこれらの列があります。そのため、Datasource Phonelist で列 (および)を見つけることができません。"Number""PhoneID""Number""PhoneID"

データテーブルに入力してセルに割り当ててみてください。

DataTable dt = new DataTable();
//Add Row p1
//Add Row p2

そして今それらを割り当てます。

  cell.DataSource = dt;
  cell.DisplayMember = "Number";
  cell.ValueMember = "PhoneID";

こちらのリンクもご覧ください

于 2011-04-18T06:52:09.703 に答える
0

次のように DataGridViewComboBoxColumn を使用してみましたか:

DataGridViewComboBoxColumn 列 = 新しい DataGridViewComboBoxColumn();
column.DataSource = PhoneList;
column.DataPropertyName = "PhoneID";
column.MaxDropDownItems = 4;
column.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox;
yourdatagridview.Columns.Add(列);

おそらく、コンボボックスにデータグリッドビューのすべての行に対して同じリストが含まれている必要があるという方法で機能します。少なくとも、すべての行に対して 1 つの PhoneList を使用すると、それが機能することがわかります。

于 2011-04-18T14:20:38.383 に答える