EM_Y Ответов: 1

Фильтруйте datagridview с помощью ключа research и показывайте только последние пять строк .


Код работает, когда я фильтрую datagridview с помощью ключа research, но я не смог найти правильный код формата, чтобы показать только последние 5 строк.

Что я уже пробовал:

Я пробовал этот код, но он не работает :

bs.Filter = "Convert(researchkey,'System.String') like '" + textBox.Text + "'   and  ORDER BY (id) DESC(5)" ;

Richard Deeming

Репост
Вы уже опубликовали этот вопрос:
https://www.codeproject.com/Questions/1175161/Filter-datagridview-with-matricule-number-and-only[^]

Поскольку эта копия имеет решение, вы должны удалить предыдущую копию.

1 Ответов

Рейтинг:
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?