Событие для обновления отображения UserControl

#c# #events

#c# #Мероприятия

Вопрос:

У меня есть UserControl и класс для обновления / сохранения результатов в базе данных. Мне нужно автоматически обновлять UserControlResultDislpay данные при сохранении. Я создал событие и для запуска обновления при возникновении обновления. У меня есть следующий код:

Класс InstrumentTest :

 public delegate void UpdateResultDisplay(object sender, EventArgs e);
public event UpdateResultDisplay RefreshDisplay;
protected virtual void OnNewResult(EventArgs e)
{
    if (RefreshDisplay != null)
        RefreshDisplay(this, e);
}

public void UpdateResultDB(ResultDataJFTOT resultData)
{
    AnalysisListCommon myresult = PContext.GetInstance().DbHandlerLocal.StoredResult(
        resultData.SampleId,
        resultData.TestDate.ToString("yyyy-MM-ddTHH:mm", CultureInfo.InvariantCulture),
        resultData.InstrumentSn,
        StringRepository.constStringSampleName);
    if (myresult != null)
    {
        Result r = new Result(new Guid(myresult.ResultId));
        ResultData rd = r.GetResultData("Rating", FindResultDataMode.byVariableIdentifier);
        string xmlTubeRating = resultData.tRating.ToString().Replace("#LT#", "<");
        rd.Text = xmlRating;
        rd.Store();
        rd = r.GetResultData("TestDate", FindResultDataMode.byVariableIdentifier);
        rd.Text = resultData.Date.ToString();
        rd.Store();
        OnNewResult(EventArgs.Empty);
    }
    else
    {
        AddTestToQueue(resultData);
    }
}

 public static InstrumentTest Instance()
{
    //If instance is null create a new instance of the InstrumentTest
    if (instrumentTestInstance == null)
    {
        instrumentTestInstance = new InstrumentTest();
    }
    return instrumentTestInstance;
}
  

Код из UserControl :

 public UserControlResultDisplay()
{
    this.InitializeComponent();
    this.InitializeUIStrings();
    this.InitializePlot();
    EventListener(resultChanged);
}             

private InstrumentTest resultChanged = InstrumentTest.Instance();

public void EventListener(InstrumentTest resultChanged)
{
    //resultChanged = (InstrumentTest)obj;
    resultChanged.RefreshDisplay  = DisplayNewResultData;                      
}

private void DisplayNewResultData(object sender, EventArgs e)
{
    RefreshCurrentResult();
}
  

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

1. Обновление не работает? Глядя на ваш код, это кажется правильным. С какой проблемой вы столкнулись?

2. @Kiran Hegde Обновление просто не работает. У меня есть другая форма (дочерняя форма UserControlResultDisplay), из которой я вызываю этот метод обновления, и он прекрасно работает. Это почти как мой слушатель не работает. Я могу отлаживать до того момента, когда вызывается делегат / событие, а затем ничего.

3. Когда вызывается функция UserControlResultDisplay? OnLoad / OnInit? Попробуйте зарегистрировать событие, вызвав код прослушивателя в функции OnInit. Результат изменен. RefreshDisplay = DisplayNewResultData;