2012-01-17 64 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 
相關問題