在运行时修改Databound ComboBox

时间:2012-02-15 22:02:16

标签: c# winforms combobox

应用程序的高级视图是:

  • Form1在DataGridView中显示客户端信息(从数据库中提取)。
  • 我从位于Client类中的属性中的DataGridView中保存客户端的信息。
  • 从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());
}

1 个答案:

答案 0 :(得分:0)

我做了两个小调整就行了!问题是我已将SelectedItem和SelectedValue设置为我正在使用的DataSource列。除此之外,所需的只是将这两个值设置为“none”,并将ValueMember和DisplayMember设置为DataSource列。谢谢你的时间wdavo!