Используйте делегата для отображения данных в другой форме

У меня есть форма, которая эмулирует виртуальную (экранную) клавиатуру с 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
Другие вопросы по тегам