Чтение онлайн

на главную - закладки

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

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

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) {

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

writer.Write("<TR><TD bgcoLor='#FFFFDD'>No options to" + " display.</TR></TD>");

 } else {

// Получить общее число голосов

for (int iLoop = 0; iLoop < Controls.Count; iLoop++) {

// Получить вариант выбора

currentOption = (Option)Controls[iLoop];

// Просуммировать результаты голосования

iTotalVotes += currentOption.Votes;

}

// Вывести каждый вариант выбора

for (int iLoop = 0; iLoop < Controls.Count; iLoop++) {

// Получить вариант выбора

currentOption = (Option)Controls[iLoop];

// Поместить имя варианта выбора в первый столбец

writer.Write("<TR><TD bgcolor='#FFFFDD' width="15%'> " +

currentOption.Name + " </TD>");

// Добавить вариант голосования во второй столбец,

// если требуется

if (currentPollStyle != pollStyle.valuesonly) {

writer.Write("<TD width='1%' bgcolor='#FFFFDD'>"

+ "<FONT Color='#FFFVDD'>.</FONT>");

currentOption.RenderControl(writer);

writer.Write("<FONT Color = '#FFFFDD'>.</FONT></TD>");

}

// Поместить график, значение и проценты в третьем столбце,

// если требуется

if (currentPollStyle != pollStyle.voteonly) {

if (iTotalVotes > 0) {

iPercentage = (currentOption.Votes * 100) / iTotalVotes;

} else {

iPercentage = 0;

}

writer.Write("<ТD bgcolor='#FFFFDD'><TABLE width='100%'>"

+ "<TR><TD><TABLE border='1' bordercolor= 'black' "

+ " width= '100%' cellpadding='0' " + " cellspacing='0'>");

writer.Write("<TR><TD bgcolor='red' width='" + iPercentage

+ "%'><FONT
соlor='red'>.</FONT></TD>");

writer.Write<"TD bgcolor='white' width='" + (100-iPercentage) +

"%'><FONT color='white'>." +

"</FONT></TD></TR></TABLE></TD>");

writer.Write("<TD width='75'>" + сurrentOption.Votes +

" (" + iPercentage + "%)</TD><TR></TABLE></TD>");

}

// Конец строки

writer.Write("</TR>");

}

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

if (currentPollStyle != pollStyle.voteonly) {

writer.Write("<TR><TD bgcolor='#FFFFDD' colspan='" +

iColumns + "'>Total votes cast: " + iTotalVotes + "</TD></TR>");

}

 }

 // Завершить таблицу

 writer.Write("</TABLE>");

}

Если выборочный опрос выводится в режиме

voteonly
, то голосование должно инициировать изменение изображения в режиме
valuesonly
.
Чтобы сделать это, нам потребуется небольшое изменение в обработчике кнопки голосования в классе
Option
:

protected void btnVote_Click(object sender, System.EventArgs e) {

 Increment;

 StrawPoll parent = (StrawPoll)Parent;

 if (parent.PollStyle == pollStyle.voteonly) {

parent.PollStyle = pollStyle.valuesonly;

 }

}

Теперь все готово к проведению голосования.

Добавление обработчика событий

Часто при использовании специальных элементов управления желательно инициировать специальные события и предоставить пользователям элемента управления действовать в соответствии с этим. В случае элемента управления выборочного опроса было бы хорошо иметь событие

Voted
, которое будет уведомлять форму, что голосование выполнено, и предоставлять ей всю информацию, необходимую для действия в этом случае.

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

Медиум

Злобин Михаил
1. О чем молчат могилы
Фантастика:
фэнтези
7.90
рейтинг книги
Медиум

На границе империй. Том 10. Часть 1

INDIGO
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 1

Громовая поступь. Трилогия

Мазуров Дмитрий
Громовая поступь
Фантастика:
фэнтези
рпг
4.50
рейтинг книги
Громовая поступь. Трилогия

Калибр Личности 1

Голд Джон
1. Калибр Личности
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Калибр Личности 1

Попаданка в деле, или Ваш любимый доктор

Марей Соня
1. Попаданка в деле, или Ваш любимый доктор
Фантастика:
фэнтези
5.50
рейтинг книги
Попаданка в деле, или Ваш любимый доктор

Кодекс Крови. Книга VIII

Борзых М.
8. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга VIII

Его маленькая большая женщина

Резник Юлия
Любовные романы:
современные любовные романы
эро литература
8.78
рейтинг книги
Его маленькая большая женщина

Господин моих ночей (Дилогия)

Ардова Алиса
Маги Лагора
Любовные романы:
любовно-фантастические романы
6.14
рейтинг книги
Господин моих ночей (Дилогия)

Зауряд-врач

Дроздов Анатолий Федорович
1. Зауряд-врач
Фантастика:
альтернативная история
8.64
рейтинг книги
Зауряд-врач

Неудержимый. Книга XVI

Боярский Андрей
16. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XVI

Измена. Право на семью

Арская Арина
Любовные романы:
современные любовные романы
5.20
рейтинг книги
Измена. Право на семью

Чужая семья генерала драконов

Лунёва Мария
6. Генералы драконов
Фантастика:
фэнтези
5.00
рейтинг книги
Чужая семья генерала драконов

Последняя Арена 6

Греков Сергей
6. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 6

На границе империй. Том 10. Часть 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 3