【问题标题】:Cascading combo box dynamic update级联组合框动态更新
【发布时间】:2019-05-17 06:49:30
【问题描述】:

我在 SQL Server 中有一个包含联系人的表。我使用 c# 将此表链接到 winforms 中的组合框。

当我在组合中选择一个联系人时,一个方法会使用该联系人的属性填充一些文本框,以便用户可以更改他们喜欢的内容,而不是在数据库中更新(通过单击按钮)该联系人。

其中一个联系人道具是另一个表的引用键,因此我放置了第二个组合框而不是文本框来选择一个新值来更新联系人道具。

附言我为每个表(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();

【问题讨论】:

  • 您是否尝试将第二个组合中的 SelectedValue 设置为第一个组合选定对象属性中的当前值?
  • 这是我要做的,但我不知道怎么做。我无法使用 combo1.selectedItem 或 combo1.selectedValue 或 .selectedWhatever 访问 obj 道具
  • 您需要为第一个组合上的 SelectedIndexChanged 编写事件处理程序。设置各种文本框后,您还可以在第二个组合上设置 SelectedValue。

标签: c# winforms combobox


【解决方案1】:

您可以通过从主ComboBox 投射项目来简单地设置外键组合框的SelectedItem

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;
}

【讨论】:

  • @Befano 请同时发布您的模型类。主对象和外键对象,具有必要的属性。然后我也可以将我的答案添加到您的正确对象中
  • 问题已更新
  • @Befano 让图片与众不同。您没有对对象的直接外键引用,而只有 id。在这种情况下,您需要做更多的工作。您需要从第二个集合中提取对象,然后将其分配给 SelectedItem
  • comboBox2DataSourceCollection?我找不到 .datasourceCollection
  • @Befano 这是您用来作为DataSource 分配给第二个ComboBox 的集合。您应该将数据保留在变量中,因为无论如何您都是从 DB 加载它的。
猜你喜欢
  • 1970-01-01
  • 2015-10-31
  • 2021-12-05
  • 2021-06-19
  • 2017-10-24
  • 2023-04-09
相关资源
最近更新 更多