我创建VB.NET数据源和Visual Studio 2005我拖动的数据源到我的对话框,并且VS中创建的文本框与我的链接对象的成员,一个System.Windows.Forms.BindingSourceSystem.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#。希望这有助于。

干杯。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top