gpt4 book ai didi

c# - DataGridView ComboBox 从不填充

转载 作者:太空宇宙 更新时间:2023-11-03 16:46:41 25 4
gpt4 key购买 nike

我在 DataGridView 中有一列是 ComboBox,但我无法填充它。我一遍又一遍地查看我的代码,它似乎是正确的,但不可能是因为从未填充 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 集合中。两种方法都不起作用。所发生的只是前三列有数据,但 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" );
}

我真的希望有人能看到我在这里缺少的东西。顺便说一下,我已经在设计器中创建了列。

谢谢。

最佳答案

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

看看这部分,我可以观察到您将电话列表设置为单元格的数据源。现在 DisplayMemberValueMember 属性将在 PhoneList 中查找列 "Number""PhoneID" 。但实际上 PhoneList 没有任何名为 "Number""PhoneID" 的列,而是 PhoneList 的子 p1 和 p2 有这些列。因此它将无法在数据源电话列表中找到列("Number""PhoneID")。

尝试将其填充到数据表中并将其分配给单元格。

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

现在分配它们。

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

另见 this link

关于c# - DataGridView ComboBox 从不填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5698835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com