我用VB.NET和Visual Studio 2005创建了一个数据源。我将数据源拖到我的对话框上,VS用我链接的对象的成员创建了文本框,System.Windows.Forms.BindingSource
和{{{ 1}}。
我填充了List(名为myList),将myList设置为BindingSource中的DataSource,除了我希望它是只读的这一事实外,它们的工作方式很好。如果用户更改了其中一个文本框中的内容,则会保存更改。
我尝试创建一个只读集合来绑定到BindingSource,但这并没有解决问题:
System.Windows.Forms.BindingNavigator
我想我可以禁用所有文本框,但这看起来有点笨拙,而且我可能想要更改字体颜色以便更容易阅读。
理想情况下,我可能不会关心用户是否能够将焦点设置到文本框,甚至编辑内容,但我不希望任何更改持续存在。也就是说,如果有人编辑了某些东西,使用导航器转到下一条记录,然后返回,我就会想要它在用户玩之前就已经存在了。
有任何建议/指导吗?
提前致谢!
答案 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#中。希望这会有所帮助。
干杯。