我是编程新手,很难理解对象的生命周期/实例化。
我有一个带有datagridview和面板的窗口。
datagridview有一个复选框列和一个从数据库填充的名称列表。
该面板有几个文本框(例如姓名,年龄,最喜欢的运动队)和“保存更改”按钮。
这个想法是,当用户通过选中相应的复选框选择datagridview中的某个人时,面板会通过从数据库中提取数据来显示该人的相关数据(姓名,年龄,青少年体育团队)。如果用户想要更新该人的详细信息,可以通过键入文本框然后单击“保存更改”按钮来更新。到目前为止一切都很简单。
我设计这个的方法是拥有一个'panel'类,并在用户选中复选框时创建一个实例。 (注意 - 我创建'panel'类的原因是我打算在我的表单中的其他tabpages上复制datagridview和panel,并认为有一个我可以重用的通用'panel'类是有用的。 )
我的代码看起来有点像这样:
If CheckBoxClicked Then
Dim UpdatePanel As New UpdatePanel(MyForm.NameTextBox, MyForm.AgeTextBox, MyForm.FavSportTeamTextBox, MyForm.SaveButton)
UpdatePanel.GetData()
...
当用户点击SaveButton时,数据会更新到数据库,并且我有一条显示消息(简单文本框),显示“更新成功”并显示5秒后隐藏自己。
问题在于:
假设用户选中复选框,检查数据并且不做任何更改,然后选中另一个复选框并决定通过单击“保存更改”按钮更新数据。会发生什么是“更新成功”消息显示两次。
我认为这是因为每次用户选中复选框时,都会创建一个UpdatePanel实例。如果我选择五个不同的人使用复选框,然后点击“保存更改”,我会得到五个“更新成功”消息。
我不知道如何克服这个问题。感觉就像每次单击一个复选框时,我需要检查UpdatePanel的实例是否存在,然后将其销毁。我尝试使用UpdatePanel = Nothing,还调查了IDisposable和GC.Collect(),但没有运气。
我的问题是:
由于
答案 0 :(得分:0)
确保在更新数据库之前检查是否有任何更改。可能每当用户查看数据时,您都会添加一些可以添加单个更新的内容。如果您发布更多代码会更容易回答,因为您的解释不是很清楚,如果没有看到大部分代码,很难说问题出在哪里。
使用singleton模式
这取决于您如何创建它们。在方法范围中创建的对象被标记为删除,并等待GC收集他。如果你的对象存储在WinForm的某个变量中,它将使它们远离GC。所以默认情况下对象正在消亡,但你可以让它活得更久。另请注意,GC时间未确定,您永远不知道GC何时会执行此操作并销毁对象。
s not clear what was done, so if you post the code I
能够回答这个问题。