Обновить winform DataGridView из другой Winform

#c# #winforms

#c# #winforms

Вопрос:

Я создал событие задачи winform, которое отправит отчет по электронной почте в указанное время в моем классе планировщика задач.

taskEvent.cs

 public partial class taskEvent : Form
{
    //trigger task scheduler
    void triggerItem_OnTrigger(object sender, TaskScheduler.OnTriggerEventArgs e)
    {
        //Some other codes that generate report and specified formated filename on trigger.

        //send report on time scheduled
        SendMail(filename);
    }

    private void sendMail(string filename)
    {
        try
        {
          //send filename report as attachment
          SmtpServer.Send(mail);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
       updateLogs();
    }

   public void updateLogs()
   {
       //update log datagridview in another form.
       //update filename,datedelivered,status.
   }
}
  

Теперь, когда электронное письмо успешно отправлено, я хочу, чтобы оно добавило новую строку в datagridview моей формы журнала. В форме журнала отобразится имя файла, дата отправки и статус электронного письма.

logForm.cs

 | Filename |    Date Delivered     |   Status     |  
|----------|-----------------------|--------------|  
| test123  | Friday, ‎July ‎04, ‎2014 | Delivered    |  
|          |                       |              |
  

Возможно ли добавить список в data gridview в logForm из моей формы taskEvent? Пожалуйста, сообщите, как это возможно. Спасибо.

Ответ №1:

Да, и это довольно просто с помощью следующих шагов:

  • Добавьте в свою форму журнала общедоступный метод и выберите класс, представляющий данные, которые вы хотите зарегистрировать.
  • Добавьте этот новый метод в сетку
  • Создайте ссылку на форму журнала в форме задачи, сохранив ее в переменной
  • Выполняйте вызовы общедоступного метода, когда хотите регистрировать события

Редактировать

Итак, пункт 3. вам нужно что-то вроде этого, очевидно, что при создании вашей TaskForm вам нужно присвоить этой переменной экземпляр LogForm.

 class TaskForm : Form
{
   public LogForm MyLogForm;

   public void updateLogs()
   {
       MyLogForm.UpdateLog(new LogEntry());
   }
}
  

Комментарии:

1. спасибо, Ян, я понимаю тебя за 1-й и 2-й пункты. Немного запутался на 3-м и 4-м. вы имеете в виду передачу переменной из задачи в журнал? может ли этот метод обновлять gridview в режиме реального времени?

2. @Ren — Немного отредактировал мой ответ, чтобы прояснить ситуацию.

3. tq, это означает, что 1-й мне нужно создать класс в других файлах saperated class, затем 2-й указан для сохранения значения в форме задачи, 3-й — вызвать общедоступный метод в форме журнала в форме задачи? поправьте меня, если я ошибаюсь.

4. @Ren: Боюсь, я не понимаю вашего вопроса

5. хорошо, я имею в виду, что для вашего первого пункта мне нужно сначала создать новый класс в новом отдельном файле класса rite?