Высокий уровень приложения:Изменение 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());
}
Итак, суть проблемы в том, что вы не можете установить правильное значение поля сокета в Form2? Можете ли вы разместить свой код Form2, связанный с вашим полем со списком – wdavo
Да, суть проблемы в том, что я не могу установить правильный тип case в ComboBox в Form2 с информацией, полученной из Form1. Я добавил еще несколько кода, сообщите мне, помогает ли это, или если вам нужно что-то еще в конкретном. – ThiagoNSiq
Можете ли вы добавить MessageBox.Show (CaseTypeComboBox.Items.Count.ToString()); после вашего заявления .Fill и сообщите мне, что это такое. Я подозреваю, что это будет 0, что означает, что в то время, когда вы пытаетесь установить SelectedValue, ваш ComboBox еще не обновлен. – wdavo