2013-12-22 3 views
1

В моем проекте winform C# я использовал несколько пользовательских элементов управления. Здесь он содержит два параметра, как этогоДинамическое обновление usercontrol

Home > Person > Addperson 

Home > Teacher > AddTeacher 

Личность и Учитель содержит ListBox, которые отображают все лицо/учитель из базы данных. , когда я добавляю человека, используя Addcerson, данные введены успешно. Но когда я возвращаюсь к Лицо Это ничего не показывает. В то же время, если я вернусь домой и заберусь в AddTeacher, здесь из раскрывающегося списка я могу найти недавно добавленные данные.

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

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

Я пробовал разные методы, но ни один из них не работает. Я попробовал метод обновления. Также попробовал с datasource=null перед фактической декларацией источника данных.

Код для лица Listbox:

var personListDictionary = new Dictionary<int, string>(); 

SqlCommand prsonListCmd = new SqlCommand("SQL QUERY", Connection); 
SqlDataReader dr = prsonListCmd.ExecuteReader(); 

if (dr.HasRows) 
{ 
    while (dr.Read()) 
    { 
     ... 
     personListDictionary.Add(Key, Value); 
    } 
} 

PersonList.DisplayMember = "Value"; 
PersonList.ValueMember = "Key";   
PersonList.DataSource = new BindingSource(personListDictionary, null); 
+0

Ну вы должны каким-то образом уведомить об этом лицо или пользовательские элементы управления учителя что они должны обновиться. Один из способов - поднять OnEntityAdded или что-то подобное в пользовательских элементах AddPerson и AddTeacher и обрабатывать их в Person или Teacher. – sventevit

+0

@sventevit Я не уверен, что вы хотите сказать. Пожалуйста, объясните больше. Есть ли какой-либо конкретный метод для такого обновления? – Nabil

ответ

0

Если я правильно понимаю ваш пример правильно, то у вас есть одна форма для Windows, который содержит Person и AddPerson пользовательские элементы управления. Одним из вариантов решения этой проблемы заключается в следующем:

  1. Добавить OnPersonAdded событие в пользовательском элементе управления AddPerson:
  2. Добавьте метод Refresh в пользовательском элементе управления Person (тот же самый код, который вы публикуемую в вашем примере)
  3. Добавить обработчик для OnPersonAdded в основной форме Windows, который обновляет данные в пользовательском элементе Person.

управления пользователя AddPerson:

public event EventHandler<object, EventArgs> OnPersonAdded; 

// When you add a Person, then raise the event: 
var handler = OnPersonAdded; 
if (handler != null) 
{ 
    OnPersonAdded(this, EventArgs.Empty); 
} 

Person управления пользователя:

public void Refresh() 
{ 
    // your code from the example 
} 

Родительские окна формы:

addPersonUserControl.OnPersonAdded += (sender, e) => personUserControl.Refresh(); 
Смежные вопросы