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

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

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

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

Поэтому нам потребуется:

? Код для свойств Name и Votes (хранимых в ViewState)

? Код инициализации в CreateChildControls()

? Код для обработчика нажатия кнопки

Мы включаем также вспомогательный метод Increment(), который будет добавлять голос к текущему счету. Этот вспомогательный метод вызывается обработчиком нажатия кнопки.

Нам понадобится также поддержка INamingContainer, так как мы имеем несколько экземпляров этих элементов управления со своими собственными потомками.

Код класса Option будет находиться в файле StrawPoll.cs, который мы должны добавить к проекту вместе со стандартными инструкциями namespace и using, согласно уже известным нам элементам управления RainbowLabel. Код будет иметь следующий вид:

public class Option : System.Web.UI.WebControls.WebControl, INamingContainer {
 public string Name {
  get {
   return (string)ViewState["_name"];
  }
  set {
   ViewState["_name"] = value;
  }
 }
 public long Votes {
  get {
   return (long)ViewState["_votes"];
  }
  set {
   ViewState["_votes"] = value;
  }
 }
 public void Increment() {
  ViewState["_votes"] =(long)ViewState["_votes"] + 1;
 }
 public void Reset() {
  ViewState["_votes"] = 0;
 }
 protected override void CreateChildControls() {
  Button btnVote = new Button();
  btnVote.Text = "Vote";
  btnVote.Click += new System.EventHandler(btnVote_Click);
  Controls.Add(btnVote);
 }
 protected void btnVote_Click(object sender, System.EventArgs e) {
  Increment();
 }
}

Отметим, что метод Render() не был здесь переопределен. Это связано с тем, что этот элемент управления имеет одного наследника, кнопку голосования и никакой другой информации для вывода. Поэтому можно использовать значение по умолчанию, которое будет просто изображением кнопки.

Оглавление книги


Генерация: 1.536. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз