Я работал над проектом C #, который использует TabControl
. У меня есть DataTable
, который привязан, используя один и тот же DataView
к двум различным сущностям, ListBox
на одной вкладке и DataGridView
в другой.
Я начал сохранять выбор пользователя для этих элементов управления между запусками. При запуске оба параметра ListBox
и DataGridView
устанавливаются на правильные значения. Когда происходит переключение табуляции, если я не изменил выбранный элемент в ListBox
, выбранная строка в DataGridView
получает значение null
, а затем вызывается обратный вызов SelectedIndexChanged
для ListBox
, полагая, что первый пункт в списке был выбран. Однако, если я заставлю вкладку с DataGridView
отображаться при запуске, проблема не возникнет.
Ни элемент управления, ни вкладки не имеют обратных вызовов при отображении или вводе. У меня заканчиваются идеи.
Пример кода:
/// <summary>
/// Updates several on-screen controls based on the currently selected item.
/// </summary>
private void updateDisplay()
{
Console.WriteLine("Selection (ListBox): " + myListBox.SelectedIndex);
Console.WriteLine("Selection (DataGridView): " + ((myDataGridView.SelectedRows.Count > 0) ? (""+myDataGridView.SelectedRows[0].Index) : ("null"));
// Update the various labels and textboxes.
}
/// <summary>
/// Callback when the selected index of myListBox changes.
/// </summary>
private void myListBox_SelectedIndexChanged(object sender, EventArgs e)
{
updateDisplay();
}
/// <summary>
/// Callback when the selected row of myDataGridView changes.
/// </summary>
private void myDataGridView_SelectionChanged(object sender, EventArgs e)
{
updateDisplay();
}
Результаты:
// При запуске
Выбор (ListBox): 1
Выбор (DataGridView): 1
// После смены вкладки
Выбор (ListBox): 0
Выбор (DataGridView): ноль
Есть идеи?