Вкладка переключения сбрасывает выделенную область данных - PullRequest
0 голосов
/ 02 февраля 2010

Я работал над проектом 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): ноль

Есть идеи?

1 Ответ

0 голосов
/ 02 февраля 2010

Надежда Это помогает:

Привязка данных не происходит в элементах управления пока элементы управления не созданы. TabPage создает только дочерние элементы управления после того, как TabPage было сделано видимый. Чтобы получить привязку данных, вам нужно заставить ребенка элементы управления на вкладке, которая будет создана и один из способов сделать это показ / скрытие TabPage (как вы обнаружили).

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