定制控制 - 解决方案创意?

时间:2012-01-17 08:32:21

标签: asp.net vb.net custom-controls

我有一个自定义用户控件,它继承了asp:Repeater并在第一次运行时'初始化' - 它找到子控件(在转发器项模板中)并根据作为属性提供的tablename属性创建一个SQL表控制。要知道不要再次初始化它,我只需检查表格(这有问题)。

我的问题是,在初始化,几天甚至几周之后,tablename属性不应该更改。

如何在初始化后才将readonly属性和值绑定到特定控件?

听起来很棘手,也许不可能。开箱即用的解决方案?

编辑: Thx Dennis - 我不是在谈论运行期间的修改

2 个答案:

答案 0 :(得分:3)

仅在以前未设置_tablename时设置_tablename:

Private _tablename As String

Public Property TableName() As String
    Get
        Return _tablename
    End Get
    Private Set(ByVal value As String)
       If String.IsNullOrEmpty(_tablename) Then 
           _tablename = value
       End If
    End Set
End Property

C#

private string _tablename;

public string Tablename {
    get { return _tablename; }
    private set {
        if String.IsNullOrEmpty(_tablename)
            _tablename = value;
    }
}

要使字段_tablename在设置后无法访问,您可以将其声明为ReadOnly。但请注意,它只能在对象构造期间设置。然后必须在构造函数中进行初始化:

Private ReadOnly _tablename As String

Public ReadOnly Property Tablename() As String
    Get
        Return _tablename
    End Get
End Property

Public Sub New()
    ' This must happen here, _tablename is readonly from anywhere else:
    _tablename = "yourtablename" 
End Sub

答案 1 :(得分:0)

如何在构造函数中传递表名的用户控件。在init函数(或构造函数,如果您愿意)中创建表。

然后做:

Private _tablename As String (Initialised at construction)

Public Property TableName() As String
Get
    Return _tablename
End Get

End Property