Arturo Vianni Ответов: 1

Navigate выбрасывает только видимую строку в datagridview C#


Я хочу использовать кнопки в качестве навигатора, чтобы перейти к выбрасыванию видимых строк datagridview,я использую этот код, чтобы скрыть строки :
private void Form1_Load(object sender, EventArgs e)

    {

        this.categoriaTableAdapter.Fill(this.mioOilMixDataSet.Categoria);
        for (int item = 0; item < categoriaDataGridView.Rows.Count - 1; item++)




        {
            if (categoriaDataGridView.Rows[item].Cells[2].Value.ToString().Contains("A"))
            {

                CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[categoriaDataGridView.DataSource];
                currencyManager1.SuspendBinding();
                categoriaDataGridView.Rows[item].Visible = true;
                currencyManager1.ResumeBinding();


            }
            else
            {
                CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[categoriaDataGridView.DataSource];
                currencyManager1.SuspendBinding();
                categoriaDataGridView.Rows[item].Visible = false;
                currencyManager1.ResumeBinding();
            }



        }

    }



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

а это для навигации :
private void button1_Click(object sender, EventArgs e)
    {

        foreach (DataGridViewRow row in categoriaDataGridView.Rows)
        {
            if (row.Visible)
            {
                categoriaBindingSource.MoveNext();
                break;
            }

        }

Это перейти к следующему ряду, но показать также невидимые строки, почему ?

1 Ответов

Рейтинг:
4

Sheila Pontes

Привет,

Это произошло потому, что запись находится в сетке, хотя вы ее и не видите. Метод MoveNext не имеет контроля над видимостью строки, он перемещается для следующей записи в сетке, видимой или нет.

Делать то, что ты хочешь. Делай вот так:

private void button1_Click(object sender, EventArgs e)
{
   //find the current position selected
   int indexrow = categoriaBindingSource.Position;

   //read the rows until find the first visible row
   for (int item = indexrow; item < categoriaDataGridView.Rows.Count - 1; item++)
   {
        //verify if the next rows is visible
        if (categoriaDataGridView.Rows[(item + 1)].Visible)
        {
            //move the selector for this position
            categoriaBindingSource.Position = (item + 1);
            break;
        }
   }
}