【问题标题】:Modifying Databound ComboBox at run time在运行时修改 Databound ComboBox
【发布时间】:2012-03-07 07:30:24
【问题描述】:

应用程序的高级视图是:

  • Form1 在 DataGridView 中显示客户端信息(从数据库中提取)。
  • 我将来自 DataGridView 的客户端信息保存在 Client 类的属性中。
  • 从 Form1 中,用户可以单击一个按钮来实例化 Form2 并允许修改客户端的信息。
  • Form2 的构造函数有一个 Client 对象作为参数。这个对象保存了来自 Form1 的所有客户信息。使用此对象,我可以重新填充我希望用户能够在 Form2 上编辑的字段。

DataSource 中有一个表,其中包含所有案例类型(即 CaseType1、CaseType2、CaseType3)。

然后,我使用 ComboBox 并在实例化表单时使用来自 DataSource 的所有案例类型填充它。我的 ComboBox 设置如下:

DataSource:设置为我需要的列和数据的 CaseTypeBindingSource。 DisplayMember:正在使用的查询的结果。 ValueMember:正在使用的查询的结果。 (与 DisplayMember 相同) SelectedValue:我尝试过使用“none”,并且与 DisplayMember 和 ValueMember 具有相同的值。

问题来了:

在运行时,我希望能够将从 Form1 带来的客户案例类型分配为当前在 ComboBox (SelectedItem) 中选择的项目。

我可以将案例类型分配给一个文本框并完成它。但我的想法是,我希望表单向用户显示客户的案例类型是什么,并允许他/她使用 ComboBox 更改它。

ComboBox 名称是 CaseTypeComboBox。保存案例类型信息及其属性的对象是client.CaseType。

我在构造函数中尝试了以下内容:

CaseTypeComboBox.SelectedItem = client.CaseType;

我还尝试在 Form2 中创建一个名为 origCaseType 的类变量,将 client.CaseType 值分配给构造函数中的 origCaseType 类变量。然后在 Form2_Load(...) 事件触发时执行以下操作:

CaseTypeComboBox.SelectedValue = origCaseType;

有人对此有任何想法吗?有没有类似的经历?

如果有任何需要澄清的地方,请告诉我,不胜感激。

提前致谢!

TS

“Form2”构造函数:

public ModifyCase(Client client)
{
    InitializeComponent();
    CaseNumberTextBox.Text = client.CaseNumber;
    LoadStatusComboBox(client.Status);
    LoadIsClosedRadioButton(client.IsClosed);
    LoadIsInStorageRadioButton(client.IsInStorage);
    LastModifiedTextBox.Text = client.LastModified.ToString();
    NotesTextBox.Text = client.Notes;

    origCaseType = client.CaseType;
}

“Form2”加载事件:

private void ModifyCase_Load(object sender, EventArgs e)
{
    //Fills the ComboBox box with case types
    this.case_typesTableAdapter1.Fill(this.testDataSet1.case_types);

    //Attempts to set value for client's case type from Form1
    CaseTypeComboBox.SelectedValue = origCaseType;
    //Just to help me see what these variables are holding to figure
    //out the problem...
    MessageBox.Show(origCaseType);
    MessageBox.Show(CaseTypeComboBox.SelectedIndex.ToString());
}

【问题讨论】:

  • 那么问题的症结是在Form2中无法设置正确的组合框值吗?您能否发布与您的组合框相关的 Form2 代码
  • 是的,问题的关键是我无法使用从 Form1 引入的信息在 Form2 的 ComboBox 上设置正确的案例类型。我发布了更多代码,让我知道这是否有帮助,或者您是否需要任何其他具体内容。
  • 可以添加MessageBox.Show(CaseTypeComboBox.Items.Count.ToString());在您的 .Fill 声明之后,让我知道它是什么。我怀疑它将为 0,这意味着在您尝试设置 SelectedValue 时,您的 ComboBox 尚未更新。
  • Count 是 53,这是我拥有的案例类型的数量。我做了一个小的调整,产生了不同的结果,但还是有问题。
  • 我做了两个小的调整就成功了!问题是我已将 SelectedItem 和 SelectedValue 设置为我正在使用的 DataSource 列。除此之外,只需将这两个值设置为“none”,并将 ValueMember 和 DisplayMember 设置为 DataSource 列。感谢您抽出宝贵时间!

标签: c# winforms combobox


【解决方案1】:

我做了两个小调整,成功了!问题是我已将 SelectedItem 和 SelectedValue 设置为我正在使用的 DataSource 列。除此之外,只需将这两个值设置为“none”,并将 ValueMember 和 DisplayMember 设置为 DataSource 列。感谢您抽出宝贵时间!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    相关资源
    最近更新 更多