BindingSource的/ BindingNavigator:如何防止绑定数据源的编辑?
-
20-09-2019 - |
题
我创建VB.NET数据源和Visual Studio 2005我拖动的数据源到我的对话框,并且VS中创建的文本框与我的链接对象的成员,一个System.Windows.Forms.BindingSource
和System.Windows.Forms.BindingNavigator
。
我填充列表(称为myList中),设置myList中作为BindingSource的数据源和工作的事情除了事实桃色的,我想这是只读的。如果用户更改的一个文本框的东西,它保存更改。
我试图创建一个只读集合绑定到BindingSource,但这并没有解决这个问题:
Dim detailsDlg As New dlgMyDetails
Dim readOnlyList As New ReadOnlyCollection(Of MyObjects)(myList)
detailsDlg.MyBindingSource.DataSource = readOnlyList
detailsDlg.ShowDialog()
我想我可以禁用所有的文本框,但似乎有点笨拙,再加上我可能要更改字体颜色,使其更易于阅读。
在理想情况下,我可能不会关心,如果用户能够将焦点设置到文本框,甚至编辑的内容,但我只是不希望任何改变持续。也就是说,如果有人编辑的东西,用来导航转到下一个记录,然后返回,我想它,因为它是用户用它播放之前。
任何建议/指导?
提前感谢!
解决方案
从模型 - 视图 - 控制器的角度来看,所需的限制是不能在模型或控制,但是该视图。视图应该限制什么是在屏幕上可编辑的。
如果它确实是只读的,为什么不与一个只读的用户界面元素,即标签去?这样做的原因是为了减少混乱给用户。如果它是一个文本框,有可能在某个点的数据变成可编辑的合理预期。如果不是这种情况,则呈现文本框禁用很可能不是正确的UI元素来呈现的,而,如所提到的,标签
其他提示
而不是使一个ReadOnlyCollection,你可以更改属性在您的类(MyObjects),以只读或添加属性System.ComponentModel.ReadOnly(真)为您的属性,例如:
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和名称将是只读的,遗憾如果示例是在C#。希望这有助于。
干杯。