Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

if (tagName.ToLower.EndsWith("option")) return typeof(Option);

return null;

 }

 public override void AppendLiteralString(string s) {

// ничего не делать, чтобы избежать добавления встроенного текста

// к элементу управления

 }

}

Здесь мы переопределяем метод

GetChildControlType
базового класса
ControlBuilder
чтобы он возвращал тип класса
Option
в ответ на тег с именем
<Option>
. Фактически, чтобы все работало в максимальном количестве ситуаций, мы ищем любое имя тега, которое оканчивается строкой
"option"
с буквами в верхнем или нижнем регистре.

Мы переопределяем также метод

AppendLiteralString
так, чтобы любой промежуточный текст, включая пробелы, игнорировался и не вызывал никаких проблем.

Когда это сделано в предположении, что в

StrawPoll
нет никаких других элементов управления, мы будем иметь все элементы управления
Option
содержащимися в коллекции
Controls
из
StrawPoll
. Эта коллекция не будет содержать никаких других элементов управления.

Отметим, что построитель элементов управления использует коллекцию атрибутов. Чтобы использовать это добавим следующую инструкцию

using
в пространство имен:

using System.Collections;

Стиль StrawPoll

Прежде чем перейти к рассмотрению самого класса

StrawPoll
, необходимо рассмотреть еще один вопрос проектирования.
StrawPoll
должен выводиться в трех формах:

□ Только кнопки для голосования

□ Только результаты

□ Кнопки для голосования и результаты

Для этого можно определить перечисление, которое затем использовать как свойство элемента управления

StrawPoll
:

public enum pollStyle {

 voteonly, valuesonly, voteandvalues

}

Как мы видели ранее, свойства, которые являются перечислениями, легко использовать, и мы можем применять текстовые имена в качестве значений атрибутов в ASP.NET.

Элемент управления StrawPoll

Теперь соберем все вместе. Для начала определим два свойства:

Title
дли вывода заголовка в элементе управления и
PollStyle
для хранения перечисления типа вывода. Оба они будут использовать
ViewState
для сохранения состояния:

[ ControlBuilderAttribute (typeof (StrawPollControlBuilder)) ]

[ ParseChildren(false) ]

public class StrawPoll : System.Web.UI.WebControls.WebContol, INamingContainer {

 private string title = "Straw Poll";

 private pollStyle currentPollStyle = pollStyle.voteandvalues;

 public string Title {

get {

return title;

}

set {

title = value;

}

 }

 public pollStyle PollStyle {

get {

return currentPollStyle;

}

set {

currentPollStyle = value;

}

 }

}

Остальная часть этого класса посвящена методу

Render
. Он будет выводить весь элемент управления выборочного опроса вместе со всеми вариантами выбора, принимая в расчет используемый стиль опроса. Мы выводим кнопки голосования, вызывая метод
RenderControl
производных элементов управления
Option
, и выводим результаты опроса графически и численно с помощью свойств Votes производных элементов управления
Option
для создания простого кода HTML.

Код, прокомментированный для ясности, будет выглядеть следующим образом:

protected override void Render(HtmlTextWriter writer) {

 Option CurrentOption;

 long iTotalVotes = 0;

 long iPercentage = 0;

 int iColumns = 2;

 // Начало таблицы, изображение таблицы

 if (currentPollStyle == pollStyle.voteandvalues) {

iColumns = 3;

 }

 writer.Write("<TABLE border='1' bordercolor='black' bgcolor='#DDDDEB'" +

" width= '90%' cellpadding='1' cellspacing='1'" + " align='center'>");

 writer.Write("<TR><TD colspan='" + iColumns + align='center'"

+ " bgcolor='#FFFFDD'>");

 writer.Write("<B>" + title + "</B></TD></TR>");

 if (Controls.Count == 0) {

// текст по умолчанию, когда нет вариантов выбора

  • Читать дальше
  • 1
  • ...
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: