Есть TextBox
в который вводятся буквы и по этим буквам база выдает мне результат поиска. Вот код:
private void tbSearchPC_KeyUp(object sender, KeyEventArgs e)
{
string fullPath = Path.GetFullPath("Database.mdf");
string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=" + fullPath + ";Integrated Security=True";
myConnection = new SqlConnection(connectionString);
myConnection.Open();
if(Menu1_1On == 1)
query = "SELECT * FROM Computers WHERE (Name) LIKE (N'%" + tbSearchPC.Text + "%')";
if (Menu1_2On == 1)
query = "SELECT * FROM Laptops WHERE (Name) LIKE (N'%" + tbSearchPC.Text + "%')";
if (Menu1_3On == 1)
query = "SELECT * FROM Smartphones WHERE (Name) LIKE (N'%" + tbSearchPC.Text + "%')";
if (Menu1_4On == 1)
query = "SELECT * FROM Tablets WHERE (Name) LIKE (N'%" + tbSearchPC.Text + "%')";
SqlCommand command = new SqlCommand(query, myConnection);
SqlDataReader reader = command.ExecuteReader();
GetData(reader);
}
Также есть кнопка сортировки по возрастанию и по убыванию. Вот код:
private void SortUpToDown(string sender)
{
string fullPath = Path.GetFullPath("Database.mdf");
string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=" + fullPath + ";Integrated Security=True";
myConnection = new SqlConnection(connectionString);
myConnection.Open();
if (sender == "Name")
{
if (Menu1_1On == 1)
//query = "SELECT * FROM Computers ORDER BY Name ASC and WHERE (Name) LIKE (N'%" + tbSearchPC.Text + "%'"; //<- пытался сделать что-то вроде этого
query = "SELECT * FROM Computers ORDER BY Name ASC";
if (Menu1_2On == 1)
query = "SELECT * FROM Laptops ORDER BY Name ASC";
if (Menu1_3On == 1)
query = "SELECT * FROM Smartphones ORDER BY Name ASC";
if (Menu1_4On == 1)
query = "SELECT * FROM Tablets ORDER BY Name ASC";
}
if (sender == "Price")
{
if (Menu1_1On == 1)
query = "SELECT * FROM Computers ORDER BY Price ASC";
if (Menu1_2On == 1)
query = "SELECT * FROM Laptops ORDER BY Price ASC";
if (Menu1_3On == 1)
query = "SELECT * FROM Smartphones ORDER BY Price ASC";
if (Menu1_4On == 1)
query = "SELECT * FROM Tablets ORDER BY Price ASC";
}
SqlCommand command = new SqlCommand(query, myConnection);
SqlDataReader reader = command.ExecuteReader();
GetData(reader);
myConnection.Close();
reader.Dispose();
}
Как составить правильно запрос, чтобы я мог выводить в отсортированном виде не только ВСЕ записи в таблице по заданному столбцу и методу сортировки, но и сортировать записи, которые мне выдала база ПОСЛЕ ПОИСКА?
Сейчас работает так: загружается форма и выполняется запрос к базе на показ ВСЕХ записей таблицы. Далее я ввожу в текстовое поля буквы для поиска - база выдает результат, а вот когда я нажимаю кнопку сортировки мне база выдает ВСЕ записи в таблице. Мне же нужно вывести только записи после поиска в отсортированном виде.
Кэшируйте ваш найденный пул записей. Используя List<T>
либо другую перечислимую коллекцию. Кэш будет обновляться каждый раз, когда Вы будете делать запрос к БД. Когда нужно отсортировать, то используйте уже не БД, а ваш кэш. Пример работы сортировки в случае List<T>
и LINQ:
List<MyDBEntry> list;// кэш
list=GetDataByFilter(); //запись в кэш данных из БД по фильтру
var sortedList = list.OrderBy(x=>x.Price).ToList(); // сортировка с использованием ранее созданного кэша
UPD:
Чтобы избежать создания перегруженного класса-обертки MyDBEntry
, можно работать с типом dynamic
.
Если стоит цель сортировать только по одному полю, и вы уверены, что оно есть во всех записях БД, то для сортировки можно использовать следующий метод, подавая на вход List<dynamic>
. При этом кэш будет выглядеть как List<dynamic>
. Предварительно ваши записи из БД нужно скастовать к dynamic
:
MyList = GetDataByFilter().Cast<dynamic>().ToList();
public List<dynamic> Sort(List<dynamic> input, string property)
{
return input.OrderBy(p => p.GetType()
.GetProperty(property)
.GetValue(p, null)).ToList();
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Внимание! Это перевод вопроса ASPNET Core 2 - ReSharper “Create Razor View” adds new view to Pages folder
У меня есть 3 проекта в TFS, один это Web Application, второй DLL, третий это Console Application
Существует проблема обновления элемента на панели типа VariableSizedWrapGridПри добавлении на панель кнопки методом Childer