Обновить DataGridView из дочерней формы - PullRequest
0 голосов
/ 14 декабря 2011

Позвольте мне быстро описать сценарий: 1) В Form1 у меня есть dataGridView с именем dgv_Employee и searchButton. 2) В событии загрузки страницы Form1 есть код, который заполняет dataGridView. Здесь я использую linq to sql для заполнения данных (например, dgv_Employee.dataSource = Dbmlobject.Employee;) 3) Каждый раз, когда нажимается кнопка searchButton, открывается новая форма Form2, и пользователь выполняет поиск конкретного сотрудника, предоставляя соответствующие данные. 4) Когда нажата кнопка поиска, я хочу, чтобы результаты поиска отображались в dataGridView и Form2 закрывались. Мне удалось закрыть форму 2. Однако мы не смогли обновить представление данных в форме1 из формы 2.

Пожалуйста, помогите мне, поскольку я пытаюсь в течение 3 дней.

Ответы [ 4 ]

1 голос
/ 30 января 2012
 Form2 form2 = new Form2();

 //add handler to catch when child form is closed    
 form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);
 form2.ShowDialog();


private void form2_FormClosed(object sender, FormClosedEventArgs e)           
{              
 //when child form is closed, this code is executed   
// Bind the Grid view       
 PopulateControls();                                  
}
1 голос
/ 14 декабря 2011

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

Позвольте привести пример.

Предположим, есть две формы Form1 и Form2.

  • Form1 содержит DataGridView и кнопку поиска .
  • Form2 содержит текстовое поле и с именем ok.
  • Предполагается, что DataGridView заполнен именем сотрудника и ему необходимо выполнить поиск по имени .
  • Форма 2 открывается при нажатии кнопки поиска, а затем после заполнения имени сотрудника в форме 2, когда нажата кнопка «ОК». Форма 2 закрывается и данные фильтруются по мере заполнения имени сотрудника.

    Таким образом, чтобы получить результат, как указано выше, вы можете сделать что-то вроде ниже:

Код для формы 1:

private void btnSearch1_Click(object sender, EventArgs e)
{
    Form2 frm2 = new Form2();
    frm2.Show();
}

что делает код выше, объяснять не нужно.
Теперь
Код для формы 2:

 public delegate void OnSearch(string employeeName);

public partial class Form2 : Form
{
    public event OnSearch OnSearchClick;
    protected virtual void FireEvent(string employeeName)
    {
        if (OnSearchClick != null)
        {
            OnSearchClick(employeeName);
        }
    }

    public Form2()
    {
        InitializeComponent();
    }

    private void btnSearch_Click(object sender, EventArgs e)
    {
        string employeeName = txtEmp.Text;
        FireEvent(employeeName);

        this.Close();
    }
}

Как я уже сказал вам нужно использовать событие и делегировать , здесь все в форме2.

В Form2 есть делегат с именем OnSearch , который содержит строковые параметры. а также есть событие OnSearchClick для делегата OnSearch . Здесь делегат доставлен на уровне класса.

Далее создается функция FireEvent, которая вызывает событие OnSearchClick при вызове этого метода.
FireEvent вызывается при нажатии кнопки btnSearch. Здесь employeeName передается в методе, вы можете передать больше параметров или объектов в методе, вы можете получить это в Form1 и применить фильтр.

Теперь пришло время редактировать код для Form1:

    private void btnSearch1_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2();
        frm2.OnSearchClick += new OnSearch(frm2_OnSearchClick);
        frm2.Show();
    }

    void frm2_OnSearchClick(string employeeName)
    {
        MessageBox.Show(employeeName);
    }

Редактируйте код для From1, как показано выше, теперь, когда вы пишете frm2. intellisense даст вам событие с именем OnSearchClick выберите его, а затем после одного пробела введите + = а затем нажмите вкладку . Это сгенерирует событие frm2_OnSearchClick , как вы можете показать вышеупомянутым кодом.

Передайте все параметры из Form2 в Form1 (я прошел только один) и напишите свою логику для привязки DataGridView в frm2_OnSearchClick событие.

Теперь, всякий раз, когда вы нажимаете кнопку поиска (которая находится в Form2) , она запускает событие frm2_OnSearchClick (которое находится в Form1) , и DataGridView обновляется.

0 голосов
/ 14 декабря 2011

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

0 голосов
/ 14 декабря 2011

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

private void BindTogrid()
{
 //call again you binding
dgv_Employee.dataSource = Dbmlobject.Employee; 
}

Тогда под твоим

searchButton click()
{
Form2 form2 = new Form2();
form2.ShowDialog(); //Show Form2
 BindTogrid(); //Execute if Dialog has been closed;
}

Надеюсь, эта помощь.

Привет

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