Как в коде Custom WebControl добавить управление из наружного кода свойствами BackColor, ForeColor, FontSise, FontName
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Как в коде Custom WebControl добавить... Expand / Collapse
Автор
Сообщение
17.04.2007 10:24
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 31.03.2008 16:02
Сообщ.: 693, Visits: 7 080
Помогите пожалуйста в приведенном коде Custom WebControl добавить управление из наружного кода свойствами BackColor, ForeColor, FontSise, FontName и т.п. в случае, когда ему задано свойство ReadOnly=True.

Imports System.ComponentModel

Imports System.Web.UI

Imports System.Web.UI.WebControls

Imports System.Drawing

Imports DBHelperNS

Imports System.Data.SqlClient

Imports System.Data

<DefaultProperty("Text"), ToolboxData("<{0}:BES_DrDownList runat=server></{0}:BES_DrDownList>")> Public Class BES_DrDownList

Inherits System.Web.UI.WebControls.DropDownList

Dim _text As String

Private mTableName As String

Private mValueField As String

Private mTextField As String

Private mWhereString As String

Private mSelValue As String

<Bindable(True), Category("Appearance"), DefaultValue("")> Property [Text]() As String

Get

Return _text

End Get

Set(ByVal Value As String)

_text = Value

End Set

End Property

Public Property [ReadOnly]() As Boolean

Get

If ViewState("ReadOnly") Is Nothing Then Return False

Return CBool(ViewState("ReadOnly"))

End Get

Set(ByVal Value As Boolean)

ViewState("ReadOnly") = Value

End Set

End Property

Public Property WhereString() As String

Get

Return mWhereString

End Get

Set(ByVal Value As String)

mWhereString = Value

End Set

End Property

Public Property SelValue() As String

Get

Return mSelValue

End Get

Set(ByVal Value As String)

mSelValue = Value

End Set

End Property

#Region "Methods"

Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)

If Me.ReadOnly = False Then

MyBase.Render(writer)

Else

If Me.SelectedItem Is Nothing Then

writer.Write(String.Empty)

Else

'Me.BorderStyle = BorderStyle.Inset

'writer.AddAttribute("color", "blue")

'Me.SelValue = Me.SelectedValue

writer.Write(Me.SelectedItem.Text)

End If

End If

End Sub

Public Function InitValues()

Dim da As New SqlDataAdapter

Dim cm As New SqlCommand

Dim CNN As New SqlConnection

Dim ds As New DataSet

Dim CommText As String

Dim dr As DataRow

CNN = pf.CreateConnection(pf.getConnectionString())

cm.CommandType = CommandType.Text

CommText = "SELECT " & Me.DataValueField & ", " & Me.DataTextField & " FROM " & Me.DataMember

If mWhereString <> "" Then

CommText = CommText & " WHERE " & WhereString

End If

cm.CommandText = CommText

cm.Connection = CNN

da.SelectCommand = cm

Try

da.Fill(ds)

Catch ex As Exception

'Stop

Exit Function

End Try

dr = ds.Tables(0).NewRow

dr(0) = 0

Select Case Me.DataMember

Case "tblListEmpType", "vwSecurityOfficer"

dr(1) = "כולם"

Case "tblWeaponShanks"

dr(1) = 0

Case Else

If mTableName <> "tblMahlaka" Then

dr(1) = " "

Else

dr(1) = 0

dr(2) = " "

End If

End Select

If mTableName <> "tblSecurityAspects" And mTableName <> "tblQualifications" Then

ds.Tables(0).Rows.Add(dr)

End If

Me.DataSource = ds.Tables(0)

Me.DataBind()

Me.SelectedValue = 0

End Function

#End Region

End Class



Спасибо!
Евгений Боуден
Сообщ. #912510
17.04.2007 10:47
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Public Property WhereString() As String
    Get
        Return mWhereString
    End Get
    Set(ByVal Value As String)
        If Not ReadOnly Then
            mWhereString = Value
        End If           
    End Set
End Property

Или я чего-то не понял?

Сообщ. #912512
17.04.2007 21:38
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 31.03.2008 16:02
Сообщ.: 693, Visits: 7 080
bazile (17.04.2007)
Public Property WhereString() As String
    Get
        Return mWhereString
    End Get
    Set(ByVal Value As String)
        If Not ReadOnly Then
            mWhereString = Value
        End If           
    End Set
End Property

Или я чего-то не понял?

Ты не понял :(

Мне нужно управлять размером и цветом фонта в режиме, когда этот DropDownList ReadOnly.

.

Спасибо!
Евгений Боуден

Сообщ. #912544
20.04.2007 11:32
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 31.03.2008 16:02
Сообщ.: 693, Visits: 7 080
Неужели нет решения?

Если действительно нет - скажите кто-нибудь - "Решения не существует!"

Спасибо!
Евгений Боуден

Сообщ. #912638
23.04.2007 18:52
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Можно точнее пояснить в чем именно здесь трудность? Пример кода из вопроса света не проливает.
Сообщ. #912726
23.04.2007 19:39
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 31.03.2008 16:02
Сообщ.: 693, Visits: 7 080
Это полный код DropDownList, который наследует все свойства обычного Microsoft-овского DropDownList. У него добавлено новое свойство ReadOnly, которое отсутствует у обычного контрола. Когда это свойство = True контрол перестает быть DropDownList-ом и просто выводит на страницу текст, соответствующий SelectedValue. (очень похоже на Label). Все бы хорошо, но выводимый фонт (в режиме, когда ReadOnly=True) невозможно отличить от остального текста на странице. Хотелось бы иметь вожможность управления размером, цветом, фонтом и прочими аттрибутами. Или хотя бы выводить текст в какой-то рамке.

Спасибо!
Евгений Боуден
Сообщ. #912730
25.04.2007 12:40
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
При прямом наследовании от DropDownList я вижу два выход. 1) Вручную анализировать CSS свойства контрола и рисовать div с нужными стилями. 2) Выводить выбранный текст внутри блока <div class="emptyDropdown">...</div>. Тогда на странице можно будет отпределять стиль с внешним видом текста.

Возможно, более правильно было бы отказаться от наследования от класса DropDownList, потому что этот класс не является всегда выпадающим списком, а значит логичнее вывести его от класса WebControl (в .NET 1.x) или от DataBoundControl (в .NET 2.0). Это потребует больше кодирования, но будет более верно. Внутри  этого класса будет создаваться или DropDownList или Label. Стиль к ним можно будет применять с помощью метода ApplyStyle.

P.S. Кстати, а чем не устраивает свойство Enabled? Оно эффективно переклчает список в режим "только-чтение". Он продолжает выглядеть как список и нет необходимости применять какие-то особые стили к нему.

Сообщ. #912796
25.04.2007 20:04
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 31.03.2008 16:02
Сообщ.: 693, Visits: 7 080
bazile (25.04.2007)
Кстати, а чем не устраивает свойство Enabled? Оно эффективно переключает список в режим "только-чтение". Он продолжает выглядеть как список и нет необходимости применять какие-то особые стили к нему.

Хороший вопрос. Немного отвлечемся и вспомним TextBox. У него есть два свойства и Enabled и ReadOnly. И это имеет смысл. Когда Enabled - контрол светло-серенький, что ярко демонстрирует его недоступность, зато плохо-читаемый, особенно для людей с плохим зрением. ReadOnly - наоборот. Отлично читается, зато не демонстрирует явно свою недоступность. Хотя и то и другое делает контрол недоступным для изменений.

Я бы с удовольствием пользовался только Enabled, но заказчик требует хорошую читаемость. А чтобы у пользователя не возникало желания понажимать на кнопочку с треугольником - требуется ее убрать.

Можно было бы вообще расположить рядом с выпадаюшим списком обычный лейбл и баловаться только свойством Visible того и другого. Но это очень много работы, поскольку на странице уйма таких мест и она и так достаточно "тяжелая".

Спасибо!
Евгений Боуден

Сообщ. #912812