2012-04-06 3 views
3

У меня есть приложение, которое отображает данные из таблицы MySQL. В основном мое приложение состоит из двух форм: основной формы и формы для добавления материала в базу данных.Обновление объекта в отдельной форме

Основная форма показывает все записи в базе данных и соответствующую информацию. Когда пользователь хочет добавить новую запись в базу данных, открывается вторичная форма, которая запрашивает информацию. Как только информация будет заполнена, пользователь нажимает кнопку «Отправить», и форма закрывается. Моя проблема заключается в том, что при закрытии вторичной формы listBox в основной форме не обновляется, чтобы отражать вновь добавленную запись.

Вот код, который выполняется, когда пользователь отправляет вторичную форму:

private void closeWindow() 
    { 
     mainForm parent = new mainForm(); 
     parent.listParts.Refresh(); 
     this.Close(); 
    } 

есть причина, когда я называю listBox быть свежей, он не показывает мои новые - Дополнительная информация? Возможно, я звоню в неправильном порядке? Или метод Refresh() даже не работает?

Любая помощь будет оценена! В качестве альтернативы, если вы знаете лучший способ сделать это, я бы хотел это услышать!

ответ

4

Проблема заключается в том, что вы освежать неправильную форму:

private void closeWindow() 
{ 
    mainForm parent = new mainForm(); 
    parent.listParts.Refresh(); 
    this.Close(); 
} 

Поскольку вы используете : new mainForm(), вы выделяете полностью отдельный экземпляр «mainForm» и обновляете его содержимое. Это не повлияет на существующую открытую форму.

Я бы порекомендовал передать ссылку на mainForm на конструктор вторичной формы. Затем он знал бы , какой экземпляр mainForm необходимо использовать для звонка Refresh().

+0

Это имеет большой смысл! Вы знаете способ вызова существующей формы? –

+1

@AndrewDeForest Передайте экземпляр этой формы при ее открытии. Когда вы создаете вторичную форму, передайте эту «эту» (основную форму, которая крепирует ее) в эту форму и сохраните там. Таким образом, вы будете иметь правильную ссылку все время. –

+0

Спасибо, я дам этот выстрел! –

1

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

Имейте родительское свойство в свою дочернюю форму, которая относится к типу вашей первой формы.

некоторые вещи подобный этот.

Ваш Родитель форма

public partial class KitTypes : Form 
{ 

public void ReloadData() 
{ 
    // Get the data and Set as datasource of control 
} 

} 

Младенец форма

public partial class Kit : Form 
{ 
    private int _KitId=0; 
    private KitTypes _parentForm = null; 


public Kit(KitTypes parentForm) 
{ 
    _parentForm =parentForm; 
} 
} 

И от вашей первой формы, когда вы создаете объект этого, передать родительскую форму в качестве параметра

Kit objChild=new kit(this); 
    objChild.Show(); 

Теперь у вашего ребенка, формы, которую вы можете вызвать публичный метод родительской формы, как этот

this._parentForm.ReloadData(); 
+0

Основная проблема, о которой упоминается тростник, заключается в том, что он использует неправильный экземпляр формы. – Servy

2

Рид given an answer с почему то, что вы сделали din't работу, вот один из возможных решений для того, как на самом деле это исправить:

в некоторых обработчик событий для MainForm:

var otherForm = new SomeOtherForm(); 
otherForm.Closed += (sender, args) => 
{ 
    //update the listbox in MainForm here 
}; 

Если вам нужна информация из второй формы для обновления списка, затем создайте общедоступное свойство в SomeOtherForm, которое предоставляет данные, необходимые для MainForm.

Смежные вопросы