我有一个显示数据库结果数据的应用程序。有时,如果结果带有附加数据,那么我们会附加记录。在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);
}
}
答案 0 :(得分:1)
正如您所指出的,问题出在声明中:
UserControlResultDisplay resultDisplay = new UserControlResultDisplay();
这实例化一个新对象(与现有对象无关),因此在其上运行函数绝对不会影响GUI上显示的内容。
在我找到正确的代码之前,让我尝试清理“对象”是什么。
C#中的每个类型,无论是显式还是隐式,都可以被视为“对象”(甚至是类似int的值类型),因此这种区别在很大程度上是无关紧要的。但是,你说有两种对象分类是正确的:
new
关键字。这些是您的int
,float
,char
等。new
关键字创建它们。这些是用class
声明的任何东西(可能还有其他一些,但这是一个很好的经验法则)。 两者都是任何函数的完全可接受的参数,它们只是以不同的方式传递。对于你想要做的事情,我们实际上利用了这一点。如果你写:
UserControlResultDisplay resultDisplay;
public MyDataClass(UserControlResultDisplay uiDisplay)
{
resultDisplay = uiDisplay;
}
您正在(并存储)引用到现有UI对象。现在,当您调用函数时,它将影响UI(假设UI端的所有内容当然都设置正确)。您可以像这样调用此构造函数(假设它来自UI类):
MyDataClass data = new MyDataClass(this);
如果你在其他地方调用它,你显然需要从其他地方引用UI来传递给MyDataClass
。