Изменение связанного с данными ComboBox во время выполнения - PullRequest
3 голосов
/ 16 февраля 2012

Высокий уровень представления приложения:

  • Form1 отображает информацию о клиенте в DataGridView (извлекается из БД).
  • Я сохраняю информацию о клиенте из DataGridView в свойствах, расположенных в классе Client.
  • В Form1 пользователь может щелкнуть кнопку, которая создает экземпляр Form2 и позволяет изменять информацию клиента.
  • Конструктор Form2 имеет объект Client в качестве параметра. Этот объект является тем, что содержит всю информацию о клиенте из Form1. Используя этот объект, я могу заново заполнить поля, которые я хочу, чтобы пользователь мог редактировать в Form2.

В источнике данных есть таблица, в которой хранятся все типы дел (т.е. CaseType1, CaseType2, CaseType3).

Затем я использую ComboBox и заполняю его всеми типами дел из источника данных при создании экземпляра формы. Мои настройки 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 голосов
/ 20 февраля 2012

Я сделал две небольшие корректировки, которые сделали свое дело! Проблема была в том, что я установил SelectedItem и SelectedValue в столбец DataSource, который я использую. За исключением того, что все, что было необходимо, это установить эти два значения в «none» и установить ValueMember и DisplayMember в столбец DataSource. Спасибо за ваше время wdavo!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...