2012-01-17 63 views
0

我有一个自定义的用户控件,在第一次运行时继承了asp:Repeater和get的'initialized' - 它找到子控件(在repeater项目模板中)并根据作为控件属性提供的tablename属性创建一个SQL表。要知道不要再次初始化它,我只需检查表(这有问题)。自定义控件 - 解决方案的想法?

我的问题是,表名属性不应该初始化后,天或甚至几周后更改。

我只能在初始化后才能将readonly属性和值绑定到特定控件?

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

编辑: THX丹尼斯 - 我不是在运行时

+0

不知道我理解这个问题,你可以表现出一定的代码? – 2012-01-17 08:36:29

+0

没有代码,在我开始编码之前试图找到解决方案。 – 2012-01-17 08:39:53

+0

你是在谈论自定义控件还是用户控件? http://support.microsoft.com/kb/893667尽管您的标题,我假定自定义控件。 – 2012-01-17 08:42:06

回答

3

只有_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 
+0

这是一个VB.NET的问题。编辑:添加到您的答案。 – 2012-01-17 08:47:19

+0

@TimSchmelter true,一定忽略了标签。我看到你相应地编辑了我的答案。谢谢! – 2012-01-17 08:48:39

+0

在一个快速测试中,我已经实现了这个代码。不要阻止用户稍后更改属性。 – 2012-01-17 08:53:28

0

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

然后做:

Private _tablename As String (Initialised at construction) 

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

End Property 
相关问题