Высокий уровень представления приложения:
- 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());
}