Как обновить DataGridView в активном WinForm из другого класса? - PullRequest
0 голосов
/ 23 мая 2019

У меня есть Winform с DataGridView, содержащая несколько табличных значений от вызовов API к базе данных сервера. Я хочу обновить таблицу после опроса серверов, поэтому я использовал таймер для регулярного опроса серверов. Я не уверен, как заставить активную WinForm обновить его или заменить его, потому что у меня есть одна WinForm, которая запускается из класса "Program", и другая, которая запускается из моего класса "PollTimers", где конфигурация таймера и Бег имеет место. Вот мои методы: «UpdateTable» из моего класса «Form1», а «OnPollEvent» из «PollTimers».

        public void UpdateTable(string id, string status, string ticketStatus)
    {

        foreach(DataGridViewRow row in dataGridView1.Rows)
        {
            if ((string)row.Cells[2].Value == id)
            {
                row.Cells[3].Value = status;
                row.Cells[4].Value = ticketStatus;
            }
        }
        dataGridView1.Update();
        dataGridView1.Refresh();

    }


        private async void OnPollEvent(Object source, ElapsedEventArgs e)
    {
        Form1 f = (Form1)Application.OpenForms["Form1"];
        Console.WriteLine("updating...");
        foreach (Server server in Polls)
        {
            string json = await call.CallAsync(server.id);
            dynamic convert = JsonConvert.DeserializeObject<RootObject>(json);
            string ticketStatus = await call.TicketStatusAsync(server.id);
            if (convert.status != "online")
            {
                Polls.Remove(server);
                RePolls.Add(server, 0);

            }
            f.UpdateTable(server.id, convert.status, ticketStatus);

        }
        Console.WriteLine("updated.");
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...