在表单之间发送数据。 (标签ID数据绑定?)

时间:2013-03-25 20:54:53

标签: c# winforms visual-studio-2010

我从数据库中获取对象(People)列表,并动态生成一个标签列表,其中包含组框中表单中每个People对象的名称。 当我点击一个标签时,我创建了一个新的表单,其中包含对象People的所有属性(我发送给子表单对象People)。在哪里保留People对象的id(来自数据库)或列表中的id? 现在,我在标签中保留了id。 TabIndex但不太好。

在这种情况下你做了什么?

经过一些回复后编辑: 感谢大家的回复。

(好的,我看到Actually WPF came to replace WinForms所以我最好继续使用WPF。)

我不需要在标签中保留完整对象,但只需要保留其ID(此对象可能具有内部,其他数据库对象关联)。为什么我需要在标签中保留完整对象?我不希望这样! 到目前为止,我在tabIndex中保留了ID(因为它是一个int),我认为它更好,因为它不使用装箱和拆箱。

这个问题使问题的一部分更加普遍 如何在表单之间发送数据? 您是否允许子表单访问存储库? (我猜,在表单之间发送存储库并不好。) 但是,如果我需要更改子格式的数据(人形式=仅打印一个人的数据),那么我需要发送一个“保存更改”。 semnal(通过一个事件)到我的主要形式。所以这就像两种形式之间的双向关联。这样的好吗?

你有一本关于winforms的书(表格之间的数据)还是c#WinFroms中的一个真实应用程序?

3 个答案:

答案 0 :(得分:1)

WinForms中是否还有Tag属性?这对于存储此类信息非常方便。

答案 1 :(得分:1)

您可以在Label.Tag中存储Id或People对象 然后,要检索它,您可以使用

var person = Label.Tag as People

答案 2 :(得分:1)

通常开发人员依赖控件的Tag属性,但我发现这是一个非常脆弱的解决方案,因为您可能希望将来使用该属性。 一个可能的简单解决方案是在Hashtable / Dictionary中为您的标签命名并存储{ControlName,ID}对。 另一个我认为更好的解决方案是在Hashtable / Dictionary中存储{Control Reference,ID}对。这样可以简化操作,因为您不必为标签生成名称。

以下是示例代码。

var peopleDictionary = new Dictionary<Label, int>();

foreach ( var person in people )
{
    var control = new Label();

    peopleDictionary.Add(person, person.ID);

    groupBox.Controls.Add(control);
}