Краткое содержание: программа позволяет пользователю иметь список игроков. У меня есть так, что пользователь может добавлять игроков в базу данных SQLite и изменять или удалять их. Я пытаюсь создать соответствие между игроками, идея заключается в том, что пользователь будет использовать панель поиска, чтобы найти имя и выбрать его из быстрого списка по мере их ввода. Я искал способы использования SearchBar и как получить доступ к указанным c данным из базы данных SQLite, и я думаю, что у меня есть список Игроков на выбор. Но когда я запускаю программу и пытаюсь найти имя, она падает по первой букве, и Visual Studio сообщает об ошибке: SQLite.SQLiteException: «нет такого столбца: a» (где «a» - первая введенная мной буква ). На заднем плане - сообщение: Ваше приложение вошло в состояние останова, но нет кода для показа, потому что все потоки выполняли внешний код (обычно системный или структурный код).
Вот как я его установил вверх. Вот строка поиска в MatchEntryPage.xmal
<StackLayout>
<SearchBar Grid.Row="1"
Grid.Column="0"
Grid.ColumnSpan="3"
Placeholder="Player 1"
TextChanged="OnPlayer1SearchTextChanged"
x:Name="Player1SearchBar" />
<ListView x:Name="Player1SearchList"
Footer="" />
</StackLayout>
Вот как я могу обработать изменение текста в MatchEntryPage.xmal.cs
async void OnPlayer1SearchTextChanged(object sender, EventArgs e)
{
Player1SearchList.ItemsSource = await
App.Database.GetPlayersByNameAsync(Player1SearchBar.Text);
}
В определении класса проигрывателя PlayerDatabase.cs здесь это функция:
public async Task<List<Player>>GetPlayersByNameAsync(string name)
{
List<Player> result = await _database.QueryAsync<Player>("SELECT * from Player where
PlayerName LIKE " + name);
return result;
}
Дополнительные примечания: В некоторых чтениях, которые я упоминал, рекомендуется не использовать SQL напрямую, но я не уверен, как это сделать. Кроме того, здесь есть другие функции в PlayerDatabase.cs, которые я могу использовать для заполнения ListView для отображения полного списка игроков в базе данных
readonly SQLiteAsyncConnection _database;
public PlayerDatabase(string dbPath)
{
_database = new SQLiteAsyncConnection(dbPath);
_database.CreateTableAsync<Player>().Wait();
}
public Task<List<Player>> GetPlayersAsync()
{
return _database.Table<Player>().ToListAsync();
}
public Task<Player> GetPlayerAsync(int id)
{
return _database.Table<Player>()
.Where(i => i.ID == id)
.FirstOrDefaultAsync();
}