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
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Громовая поступь. Трилогия
Громовая поступь
Фантастика:
фэнтези
рпг
4.50
рейтинг книги
Калибр Личности 1
1. Калибр Личности
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Попаданка в деле, или Ваш любимый доктор
1. Попаданка в деле, или Ваш любимый доктор
Фантастика:
фэнтези
5.50
рейтинг книги
Кодекс Крови. Книга VIII
8. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Его маленькая большая женщина
Любовные романы:
современные любовные романы
эро литература
8.78
рейтинг книги
Господин моих ночей (Дилогия)
Маги Лагора
Любовные романы:
любовно-фантастические романы
6.14
рейтинг книги
Зауряд-врач
1. Зауряд-врач
Фантастика:
альтернативная история
8.64
рейтинг книги
Неудержимый. Книга XVI
16. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Измена. Право на семью
Любовные романы:
современные любовные романы
5.20
рейтинг книги
Чужая семья генерала драконов
6. Генералы драконов
Фантастика:
фэнтези
5.00
рейтинг книги
Последняя Арена 6
6. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
На границе империй. Том 10. Часть 3
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00