Используйте делегата для отображения данных в другой форме
У меня есть форма, которая эмулирует виртуальную (экранную) клавиатуру с DataGridView. Эта форма находится в библиотеке, и я хочу, чтобы она была отделена от слоя данных. Как я могу передать эту форму методу для поиска в базе данных и возврата таблицы данных, которую я могу отобразить в форме?
public partial class AlphaKeypad : Form
{
public AlphaKeypad(delegate here)
{
...
}
}
Как я буду использовать делегата в этой форме?
РЕДАКТИРОВАТЬ: Я не очень ясно, в моем первоначальном вопросе, поэтому я немного отредактировал:
В MainForm() у меня есть метод под названием Поиск, как это:
public DataTable Search(string filter)
{
...
}
Я хочу передать этот метод в AlphaKeypad() для обработки следующим образом: когда пользователь нажимает некоторые клавиши, я хочу вызвать функцию Search() с введенным текстом и отобразить в dridview AlphaKeypad возвращенный DataTable из базы данных.
Надеюсь, теперь это ясно.
Спасибо!
2 ответа
Просто напишите такой метод
public DataTable FindMatchingElements(String searchTerm)
{
// ToDo: Search within the database and return a DataTable with the desired results.
}
Тогда ваш AlphaKeypad должен получить такой метод:
public class AlphaKeypad
{
private Func<String, DataTable> _SearchMethod;
public void SetSearchMethod(Func<String, DataTable> searchMethod)
{
_SearchMethod = searchMethod;
}
private void OnStartSearching()
{
var enteredSearch = GetKeywordsEnteredByUser();
var dataTable = _SearchMethod(enteredSearch);
Visualize(dataTable);
}
}
Из внешнего мира вы можете сделать:
private void InitializeAlphaKeypad()
{
var alphaKeypad = new AlphaKeypad();
alphaKeypad.SetSearchMethod(MyDatabaseClass.FindMatchingElements);
}
public AlphaKeypad(Func<DataTable> func) {
....
}
// somewhere else
new AlphaKeypad(()=> return new DataTable());
// or
DataTable FunctionReturningDataTable() {
return ....;
}
....
new AlphaKeypad(FunctionReturningDataTable); // no brackets means, the function will be passed, not the result of call