我在SQL Server中有一个带有联系人的表。我使用c#将此表链接到Winforms中的组合框。
当我在组合中选择一个联系人时,一种方法会使用该联系人的属性填充一些文本框,以便用户可以更改所需的内容,而不是通过单击按钮来更新数据库中的该联系人。
其中一个联系道具是另一个表的参考键,所以我没有使用文本框,而是放置了第二个组合框来选择新值来更新联系道具。
p.s。我为每个表(ContactModel.cs,ecc)都有一个模型,带有prop和ctor的
所以问题是:如何设置combobox.selecteditem(当用户选择一个联系人时)以匹配所选联系人的值?
另外,我正在使用Dapper。
public class ContactModel
{
public int ContactID{ get; set; } // Primary
// some other props
public int RefContactCommon { get; set; } // Reference to Common table
}
public class CommonModel
{
public int CommonID { get; set; } // Primary
public string CommonName { get; set; } // varchar(32)
}
这就是我通常将所有连击连起来的方式
combo2.ValueMember = "propID";
combo2.DisplayMember = "propName";
combo2.DataSource = SQLHighway.Loadthatprop();
答案 0 :(得分:0)
您可以通过从主SelectedItem
投射项目来简单地设置外键组合框的ComboBox
private void comboBoxObject_SelectedIndexChanged(object sender, EventArgs e)
{
comboBoxForeignKey.SelectedItem = (comboBoxObject.SelectedItem as MainObject)?.ForeignKeyObject;
}
编辑:
您的其他代码使图片有所不同。您没有对对象的直接外键引用,而只有int RefContactCommon
。在这种情况下,您需要做更多的工作。您需要从第二个集合中提取对象,然后将其分配给SelectedItem
private void comboBoxObject_SelectedIndexChanged(object sender, EventArgs e)
{
CommonModel foreignKeyObject = comboBox2DataSourceCollection.FirstOrDefault(x => x.CommonID == (comboBoxObject.SelectedItem as MainObject)?.RefContactCommon);
comboBoxForeignKey.SelectedItem = foreignKeyObject;
}