обработка всех строк в DataGridView

240
29 декабря 2021, 23:20

Пытаюсь по нажатию кнопки обработать все строки в гриде. В моем случае есть грид с сообщениями

Пытаюсь "прочитать" все сообщения по нажатию кнопки

 private void readAllBtn_Click(object sender, EventArgs e)
        {
            foreach (DataGridViewRow item in postsDataGridView.Rows)
            {
                ReadMessage();                              
            }
            GetData();           
        }

Метод для отметки сообщений как прочитанные

private void ReadMessage()
    {
        try
        {
            if (postsDataGridView.CurrentRow.Cells.Count > 0)
            {
                cs = cs.LoadFile();
                using (SqlConnection conn = new SqlConnection(cs.ToString()))
                {
                    try
                    {
                        conn.Open();
                        int rowindex = postsDataGridView.CurrentCell.RowIndex;
                        int selectId = Convert.ToInt32(postsDataGridView.Rows[rowindex].Cells[0].Value);
                        string currentStream = (string)postsDataGridView.Rows[rowindex].Cells[5].Value;                                                                 //Получаем в переменную направление сообщения
                        string querryRead = String.Format("update sta_Messages set \"GetDate\" = CAST(GETDATE() AS BINARY(8)) where \"id\" = {0}", selectId);
                        if (currentStream == "вхідне")                                                                                                                  //Проверка, если входящее - сообщение прочитано
                        {
                            SqlCommand command = new SqlCommand(querryRead, conn);
                            SqlDataReader reader = command.ExecuteReader();
                            //MessageBox.Show("Повідомлення прочитано");
                        }
                        else
                            MessageBox.Show("Відмічати можна тільки вхідні повідомлення");
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }
            else MessageBox.Show("Виберіть повідомлення");
        }
        catch { }
    }

Метод GetData(); нужен для обновления грида после чтения сообщений. Проблема заключается в том, что при нажатии на кнопку читается только первое сообщение, остальные остаются, в отладчике показывает что в цикле проходится по всем строкам, но по факту обрабатывается только первая. Итого после нажатия выход такой

Не могу понять в чем причина. спасибо за помощь!

Answer 1

Вы зачем-то прогоняете многократной цикл, вызывая один и тот же метод, который не имеет параметров:

 foreach (DataGridViewRow item in postsDataGridView.Rows)
            {
                ReadMessage();                              
            }

А тут, как я понимаю:

int rowindex = postsDataGridView.CurrentCell.RowIndex;

Выбирается текущая строка, которая выделена.

Наверное, вам нужно в ReadMessage добавить параметр и передавать туда DataGridViewRow и с ней работать.

READ ALSO
Не срабатывает таймер

Не срабатывает таймер

Имеется сервис, который собирает данные и отправляет в другой сервисСервис работает в докер-контейнере

180
Как объединить две строки вместе в PHP?

Как объединить две строки вместе в PHP?

Необходимо создать два поля формы, чтобы в одно поле ввести, например, 1000 строк и во второе поле 1000 строк, нажать на кнопку "Выполнить"

96