Рейтинг:
2
CHill60
Во-первых, никогда не используйте конкатенацию строк для создания подобных SQL-операторов. Исследование Parameters
и использовать их.
Чтобы получить последние 5 строк попробуйте выполнить этот запрос
SELECT * FROM (
SELECT * FROM yourTtable ORDER BY (id) DESC LIMIT 5
WHERE Convert(researchkey,'System.String') like @filter
) subq
ORDER BY (id) ASC
[Edit] - это решение работает только при заполнении DataGridView, а не при фильтрации. Я пытаюсь найти правильное решение и вернусь к этому решению как можно скорее.
[Edit2]. Я играл с этим в течение некоторого времени и могу ограничить отображение только
первый 5 строк, которые соответствуют фильтру-путем реализации подкачки на datagridview
(Эти статьи дают идеи, как это сделать:
DataGridView С Подкачкой (UserControl)[
^] или
Простой способ подкачки страниц в DataGridView в приложениях WinForm[
^])
Вы можете отобразить только последние 5, перейдя к последней строке в отфильтрованной сетке:
DataGridView1.FirstDisplayedScrollingRowIndex = DataGridView1.RowCount - 1
DataGridView1.Rows(Me.DataGridView1.RowCount - 1).Selected = True
Лично я бы не стал выполнять фильтрацию в DataGridView, а просто заполнял его предварительно отфильтрованными данными-в этом случае применялся бы мой исходный SQL - оператор.
Например, (непроверенный)
private void button1_Click(object sender, EventArgs e)
{
var constring = ""; //put your connection string in here
var sql =
"SELECT * FROM (SELECT * FROM yourTtable ORDER BY (id) DESC LIMIT 5 WHERE Convert(researchkey,'System.String') like @filter) subq ORDER BY (id) ASC";
using (var connection = new SqlConnection(constring))
{
connection.Open();
using (var myAdapter = new SqlDataAdapter(sql, connection))
{
myAdapter.SelectCommand.Parameters.AddWithValue("@filter", textBox1.Text);
var ds = new DataSet();
myAdapter.Fill(ds);
bs.DataSource = ds.Tables[0];
}
connection.Close();
}
}
EM_Y
Правильно ли так писать :
private void button1_Click(object sender, EventArgs e)
{
String constring = "";
MySqlConnection connection = new MySqlConnection(constring);
connection.Open();
BindingSource bs = new BindingSource();
bs.DataSource = dataGridView1.DataSource;
bs.Filter = "SELECT * FROM (SELECT * FROM database.table ORDER BY (id) DESC LIMIT 5 WHERE Convert(researchKey,'System.String') like '" + textbox.Text + "') subq ORDER BY (id) ASC";
dataGridView1.DataSource = bs;
}
CHill60
Нет, прости, что ввел тебя в заблуждение. Запрос, который я предоставил, состоял бы в том, чтобы заполнить DGV отфильтрованными данными, а не фильтровать представление существующих данных в DGV. Я ошибался.
Я обновлю свое решение. Еще раз-мои извинения
EM_Y
Я благодарен вам, я желаю вашей помощи :)
CHill60
Я только что обновил свое решение
EM_Y
Большое вам спасибо за вашу помощь , я попробую это сделать :)
EM_Y
можете ли вы мне помочь, как я могу заполнить его предварительно отфильтрованными данными !
и получить результат в datagridview !?
Я использую c#
CHill60
Обновил решение с помощью некоторого кода. Предупреждение - я не тестировал этот код.
EM_Y
Я получил эту ошибку meaage :
У вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с системой'WHERE Convert(researchkey,'.String') like @filter) subq ORDER BY (id) ASC' в строке 1
- как бы то ни было ,я буду продолжать пытаться , Я так благодарна тебе за помощь, Благослови тебя Господь .
CHill60
Я пропустил этот момент ... измените его на WHERE researchkey like @filter и посмотрите, работает ли это ... если нет, то попробуйте WHERE Convert(researchkey, varchar) like @filter
EM_Y
спасибо, но то же самое сообщение об ошибке показывает :)
CHill60
Боюсь, я недостаточно знаком с MySQL. Могу ли я предложить вам проверить документацию по функции Convert для MySQL?