BindingSource / BindingNavigator:如何防止绑定DataSource的编辑?

时间:2010-02-11 19:38:32

标签: vb.net visual-studio-2005 bindingsource readonly-collection

我用VB.NET和Visual Studio 2005创建了一个数据源。我将数据源拖到我的对话框上,VS用我链接的对象的成员创建了文本框,System.Windows.Forms.BindingSource和{{{ 1}}。

我填充了List(名为myList),将myList设置为BindingSource中的DataSource,除了我希望它是只读的这一事实外,它们的工作方式很好。如果用户更改了其中一个文本框中的内容,则会保存更改。

我尝试创建一个只读集合来绑定到BindingSource,但这并没有解决问题:

System.Windows.Forms.BindingNavigator

我想我可以禁用所有文本框,但这看起来有点笨拙,而且我可能想要更改字体颜色以便更容易阅读。

理想情况下,我可能不会关心用户是否能够将焦点设置到文本框,甚至编辑内容,但我不希望任何更改持续存在。也就是说,如果有人编辑了某些东西,使用导航器转到下一条记录,然后返回,我就会想要它在用户玩之前就已经存在了。

有任何建议/指导吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

从“模型 - 视图 - 控制”角度来看,您想要的约束不在模型或控件上,而是在视图上。视图应限制屏幕上可编辑的内容。

如果它真的是只读的,为什么不使用只读用户界面元素,即标签?这样做的原因是为了减少用户的困惑。如果它是文本框,则可以合理地期望在某些时候数据变得可编辑。如果不是这种情况,那么呈现禁用的文本框可能不是正确的UI元素,而是如上所述,是一个标签。

答案 1 :(得分:1)

您可以将类(MyObjects)中的属性更改为ReadOnly,或者将属性System.ComponentModel.ReadOnly(true)添加到您的属性,而不是创建ReadOnlyCollection,例如:

class Person
{
    public Person(int id, string name, string address)
    {
        _id = id;
        Name = name;
        Address = address;
    }

    private int _id = 0;
    public int ID { get { return _id; } }

    [System.ComponentModel.ReadOnly(true)]
    public string Name { get; set; }

    public string Address { get; set; }
}

ID和Name将是readonly,对不起,如果示例是在C#中。希望这会有所帮助。

干杯。