Пользовательский контроль - идеи решения? - PullRequest
0 голосов
/ 17 января 2012

У меня есть пользовательский элемент управления, который наследует asp: Repeater и получает 'initialized' при первом запуске - он находит дочерние элементы управления (в шаблоне элемента повторителя) и создает таблицу SQL на основе свойства tablename, предоставленного в качестве атрибута в контроль. Чтобы знать, чтобы не инициализировать его снова, я просто проверяю таблицу (это имеет проблемы).

Моя проблема в том, что свойство tablename не должно изменяться после инициализации, дней или даже недель.

Как связать свойство и значение только для чтения с конкретным элементом управления только после инициализации?

Звучит довольно сложно, может быть, невозможно. Готовое решение?

РЕДАКТИРОВАТЬ: Спасибо Деннис - я не говорю о модификации во время выполнения

Ответы [ 2 ]

3 голосов
/ 17 января 2012

Устанавливать имя_таблицы, только если оно не было задано ранее:

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 голосов
/ 17 января 2012

Как насчет инициализации пользовательского элемента управления передачей имени таблицы в конструкторе. Создайте таблицу в функции init (или, если хотите, в конструкторе).

Затем выполните:

Private _tablename As String (Initialised at construction)

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

End Property
...