从外部类刷新userControl

时间:2014-06-09 21:12:59

标签: c# refresh

我有一个显示数据库结果数据的应用程序。有时,如果结果带有附加数据,那么我们会附加记录。在UserControl中,值为" NA"直到这发生。我在UserControl类中有一个可以很好地工作的refreshdisplay()方法,不幸的是,如果我在使用" new"之后从我的dataHandler类调用它。 UserControl不刷新。我猜这是因为我用了

UserControlResultDisplay resultDisplay = new UserControlResultDisplay();

如何使用方法并与现有的UserControl进行交互,而无需实例化新的?

以下是一些代码段:

UserControlResultDisplay resultDisplay = new UserControlResultDisplay();

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();

               resultDisplay.RefreshDisplay();

               else
            {
                AddTestToQueue(resultData);
            }

            }

1 个答案:

答案 0 :(得分:1)

正如您所指出的,问题出在声明中:

UserControlResultDisplay resultDisplay = new UserControlResultDisplay();

这实例化一个新对象(与现有对象无关),因此在其上运行函数绝对不会影响GUI上显示的内容。

在我找到正确的代码之前,让我尝试清理“对象”是什么。

C#中的每个类型,无论是显式还是隐式,都可以被视为“对象”(甚至是类似int的值类型),因此这种区别在很大程度上是无关紧要的。但是,你说有两种对象分类是正确的:

  1. 值类型按价值传递(不出意料),在创建过程中不需要/允许new关键字。这些是您的intfloatchar等。
  2. 引用传递的
  3. 引用类型,并使用new关键字创建它们。这些是用class声明的任何东西(可能还有其他一些,但这是一个很好的经验法则)。
  4. 两者都是任何函数的完全可接受的参数,它们只是以不同的方式传递。对于你想要做的事情,我们实际上利用了这一点。如果你写:

    UserControlResultDisplay resultDisplay;
    
    public MyDataClass(UserControlResultDisplay uiDisplay)
    {
        resultDisplay = uiDisplay;
    }
    

    您正在(并存储)引用到现有UI对象。现在,当您调用函数时,它将影响UI(假设UI端的所有内容当然都设置正确)。您可以像这样调用此构造函数(假设它来自UI类):

    MyDataClass data = new MyDataClass(this);
    

    如果你在其他地方调用它,你显然需要从其他地方引用UI来传递给MyDataClass