Вам нужно использовать Событие и делегировать , чтобы получить желаемый результат.
Позвольте привести пример.
Предположим, есть две формы 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 обновляется.