2012-02-15 3 views
3

Высокий уровень приложения:Изменение DataBound ComboBox во время выполнения

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

В DataSource есть таблица, которая содержит все типы case (то есть CaseType1, CaseType2, CaseType3).

Затем я использую ComboBox и заполняю его всеми типами событий из DataSource при создании экземпляра формы. Мои настройки ComboBox следующие:

DataSource: установите для моего CaseTypeBindingSource, который имеет столбцы и данные, которые мне нужны. DisplayMember: результат использования запроса. ValueMember: результат использования запроса. (то же, что и DisplayMember) SelectedValue: Я пробовал его с «none» и с тем же значением, что и DisplayMember и ValueMember.

Вот проблема:

Во время выполнения, я хочу, чтобы иметь возможность присвоить тип дела клиента, который был доставлен из Form1 в качестве элемента, который в данный момент выбран в ComboBox (SelectedItem).

Я мог бы просто назначить тип case текстовому полю и сделать с ним. Но идея состоит в том, что я хотел бы, чтобы форма показывала пользователю, что такое тип клиента, и позволяет ему/ей изменять его с помощью ComboBox.

Имя ComboBox - это CaseTypeComboBox. Объект, содержащий информацию о типе case и его свойство, является 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" событие Load:

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()); 
} 
+0

Итак, суть проблемы в том, что вы не можете установить правильное значение поля сокета в Form2? Можете ли вы разместить свой код Form2, связанный с вашим полем со списком – wdavo

+0

Да, суть проблемы в том, что я не могу установить правильный тип case в ComboBox в Form2 с информацией, полученной из Form1. Я добавил еще несколько кода, сообщите мне, помогает ли это, или если вам нужно что-то еще в конкретном. – ThiagoNSiq

+0

Можете ли вы добавить MessageBox.Show (CaseTypeComboBox.Items.Count.ToString()); после вашего заявления .Fill и сообщите мне, что это такое. Я подозреваю, что это будет 0, что означает, что в то время, когда вы пытаетесь установить SelectedValue, ваш ComboBox еще не обновлен. – wdavo

ответ

0

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

Смежные вопросы