Как обновить поле со списком данных на winform - PullRequest
4 голосов
/ 10 ноября 2009

У меня есть winform с полем со списком, который заполняется из запроса в базе данных. Если я добавлю поле в базу данных, новое поле не будет отображаться в форме, пока я не закрою его и не открою снова.

Мне удалось добавить MessageBox.Show (), и, как только он появился, я закрыл его и увидел новые данные в поле со списком.

EDIT:

Позвольте мне немного уточнить. У меня есть выпадающий список, который заполняется адаптером таблицы. Я только что сделал привязку данных с графическим интерфейсом, поэтому я не уверен, как это работает.

Я хочу, чтобы новые данные, которые я ввожу, обновлялись, когда я к ним возвращался. У меня есть отдельное окно для управления данными, а затем я закрываю его и хочу обновить поле со списком того, что я только что сохранил.

Возможно ли это? Я пытался сделать это при загрузке формы, но это тоже не работает, я думаю, потому что форма уже загружена.

Ответы [ 7 ]

7 голосов
/ 10 ноября 2009

Метод Refresh не для этого. То, чего вы хотите добиться, это обновить привязку данных. Это будет что-то вроде этого:

cb.DataBindings[0].ReadValue();

Другим способом является использование источника данных, который поддерживает уведомление об изменениях. Такой источник данных запускает событие ListChanged с соответствующими параметрами для запуска обновления связанных с ним элементов управления.

3 голосов
/ 24 марта 2011

Вы должны снова заполнить адаптер таблицы из набора данных на

youTableAdapter.Fill(yourdataSet.tablename);

тогда вам нужно переназначить источник данных

this.combobox.DataSource = this.yourBindingSource;

в конце вы можете обновить свой комбинированный список

combobox.Refresh();
1 голос
/ 19 июня 2014

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

boundDataSet = proxy.ReadResources();
DataGridViewComboBoxColumn nameColumn = dataGrid.Columns["Name"] as DataGridViewComboBoxColumn;
nameColumn.DataSource = boundDataSet.Table;
1 голос
/ 21 ноября 2009

Если я правильно понимаю, одну вещь, которую вы могли бы сделать, это использовать событие ListChanged, как то, что было упомянуто, но кажется, что это не сработало.

Адаптеры таблиц в действительности не являются таблицами в обычном смысле, а являются областью временного хранения.

Посмотрите в своей функции Form1_Load (или как вы назвали свою форму, просто используя значение по умолчанию) и найдите метод tableadapter.fill. this.comboboxTableAdapter.Fill (имя вашего набора данных). Это то, что на самом деле заполняет ваш набор данных.

Создайте функцию, которая заполняет эти наборы данных (если у вас их больше одного), а затем вызовите эту функцию для события ListChanged или даже для события Activate формы. Таким образом, когда вы входите в эту дочернюю форму и изменяете данные, когда вы возвращаетесь в основную форму, данные будут там.

Надеюсь, это поможет, и удачи в вашем проекте.

1 голос
/ 10 ноября 2009

Это зависит от того, с чем связана ваша сетка данных. Повторное заполнение источника данных (например, DataTable или настраиваемого BindingList) должно автоматически заполнить сетку при условии, что событие ListChanged источника данных запущено правильно.

0 голосов
/ 04 июня 2019

Детская форма внутренняя;

private void UpdateAccount_FormClosed(object sender, FormClosedEventArgs e)
{    
   ParentForm parentForm= (ParentForm )Application.OpenForms["ParentFormName"];
   parentForm.GetAccounts();
}

Родительская форма внутренняя;

 public void GetAccounts()
    {
        AccountData lastSelectedItem = (AccountData)cbAccounts.SelectedItem;
        cbAccounts.Items.Clear();
        List<AccountData> accountDatas = AccountXML.ReadAccountXML();
        if (accountDatas != null)
            foreach (var item in accountDatas)
            {
                cbAccounts.Items.Add(item);
            }

        if(lastSelectedItem != null)
        {
            cbAccounts.SelectedText = lastSelectedItem.AccountName;
        }

    }
0 голосов
/ 26 августа 2014
         cmbguest.DataSource = null;
         loadguestDetails();

обнулите набор данных и заново свяжите комбинированный список, после чего вы сможете обновить управляемый данными комбинированный список в winforms

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