从组合框中选择项目后,在datagridview中显示单行对象数据

时间:2012-03-19 13:22:28

标签: c#

我有一个班级Person,其中包含数据成员fullNameadressoccupation

我制作了List类型的Person,并在其中存储了几个Person类型的对象。

我的Windows窗体GUI上有一个组合框和一个datagridview。

我想要做的是当您从组合框中选择一个项目时(它会自动填充来自Persons的{​​{1}}个对象)datagridview显示一行,显示当前所选项目的{ {1}}和List

为了从列表中获取有关某人的信息,我使用了我创建的方法 - fullName。此方法返回address对象。然后我像这样使用那个对象:

PersonInfo(string id)

问题是我得到一个空异常,通常位于Person行。我认为private void combobox_SelectedValueChanged(object sender, EventArgs e) { Person myObj = PersonInfo(combobox.SelectedText.ToString()); dataGridView1.Rows.Clear(); int index = dataGridView1.Rows.Add(); DataGridViewRow row = dataGridView1.Rows[index]; row.Cells["cFullName"].Value = myObj.fullName; row.Cells["cAddress"].Value = myObj.address; } 是造成这种情况的原因,但不知道使用哪种其他方法从组合框中获取信息并将其传递给row.Cells["cFullName"].Value = myObj.fullName;

1 个答案:

答案 0 :(得分:0)

您的代码的问题在于它依赖于在此特定时刻为空的SelectedText。你应该做的是通过将人员列表分配给ComboBox并使用对象来使用DataBinding,从而消除了查找匹配条目的需要。人员需要拥有公共属性__ fullname __和__ address __否则绑定将无效。

在表单OnLoad中分配DataSource:

combobox.DataSource = myListOfPersons;
// this can be set in designer but for brevity I set it here
combobox.DisplayMember = "fullname"; // Case must match. 

您的处理程序现在通过简单地转换SelectedItem来找到所选的人员。

private void combobox_SelectedValueChanged(object sender, EventArgs e)
{
    Person myObj = (Person)combobox.SelectedItem;
    // filling the grid
    dataGridView1.DataSource = new List<Person> { myObj };
}

作为旁注,但是使用调试工具会使生活变得更加容易。在要执行暂停的行上按F9,运行应用程序,当它停止时将鼠标悬停在变量/成员名称上以查看其值,或者右键单击并按QuickWatch查看对象的所有属性的值。这个工具只会告诉你myObj是null,进一步检查SelectedText会告诉你它是空的,禁止PersonInfo函数找到合适的Person。