2010-08-06 2 views
2

я использую серию LinkButtons Az, которые динамически создаются, что я хочу на нажатие каждого его изменения цвета текста на что-то другое, чтобы сделать его отличным от других, что я делаюизменение цвета кнопки частности ссылка

protected void Page_Init(object sender, EventArgs e) 
    { 
     // Adding Dynamically linkbuttons for all alphabets(i.e. A-Z) 
     for (char asciiValue = 'A'; asciiValue <= 'Z'; asciiValue++) 
     { 
      LinkButton lbtnCharacter = new LinkButton(); 
      lbtnCharacter.ID = "lbtnCharacter" + asciiValue; 
      divAlphabets.Controls.Add(lbtnCharacter); 

      lbtnCharacter.Text = Convert.ToString(asciiValue); 
      lbtnCharacter.CssClass = "firstCharacter"; 
      lbtnCharacter.ToolTip = "Show users whose name starts with '" + Convert.ToString(asciiValue) + "'"; 
      lbtnCharacter.CommandArgument = Convert.ToString(asciiValue); 
      lbtnCharacter.Command += new CommandEventHandler(lbtnCharacter_Command); 
     } 
    } 
void lbtnCharacter_Command(object sender, CommandEventArgs e) 
    { 
     ViewState["Selected_Character"] = e.CommandArgument; 
     LinkButton lbtn = (LinkButton)divAlphabets.FindControl("lbtnCharacter" + e.CommandArgument); 
     lbtn.ForeColor = System.Drawing.Color.Orange; 
     txtNameFilter.Text = string.Empty; 
     BindUserList(); 
    } 

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

ответ

2

Ваша проблема что ViewState кнопок ссылки сохраняется непосредственно перед визуализацией элементов управления, включая обновленный стиль. Затем, после обратной передачи, после Page_Init, ViewState повторно применяется к каждому элементу управления, с оранжевым стилем. Это переопределяет параметр, который вы добавляете в Page_Init. Поэтому в Page_Load вам нужно сбросить стиль на каждом из элементов управления.

Добавить другой стиль в таблице стилей

.highlighted { color:orange; } 

В lbtnCharacter_Command заменить

lbtn.ForeColor = System.Drawing.Color.Orange; 

с

lbtn.CssClass = "firstCharacter highlighted "; 

В Page_Load добавьте:

foreach (var ctrl in divAlphabets.Controls) 
{ 
    if (ctrl is LinkButton) 
     ((LinkButton)ctrl).CssClass = "firstCharacter"; 
} 

На каждой странице_Load все кнопки css класса link будут сброшены до значения по умолчанию. Это происходит после применения ViewState к ним (между PageInit и PageLoad). Затем в событии Command нажатая кнопка добавит новый стиль. Настройка цвета в этом стиле отменяет любые настройки цвета в стиле firstCharacter.

UPDATE

protected void Page_Init(object sender, EventArgs e) { 
     for (char asciiValue = 'A'; asciiValue <= 'Z'; asciiValue++) { 
      var lbtnCharacter = new LinkButton { 
       ID = "lbtnCharacter" + asciiValue, 
       Text = Convert.ToString(asciiValue), 
       ToolTip = "Show users whose name starts with '" + Convert.ToString(asciiValue) + "'", 
       CommandArgument = Convert.ToString(asciiValue) 
      }; 
      lbtnCharacter.Command += lbtnCharacter_Command; 
      divAlphabets.Controls.Add(lbtnCharacter); 
     } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Session["CurrentLetter"] != null) { 
      foreach (var ctrl in divAlphabets.Controls) { 
       if (ctrl is LinkButton) { 
        if (((LinkButton) ctrl).Text == Session["CurrentLetter"].ToString()) { 
         ((LinkButton) ctrl).CssClass = "firstCharacter highlighted"; 
        } 
       } 
      } 
     } 
    } 

    void lbtnCharacter_Command(object sender, CommandEventArgs e) { 
     //Reset all of the other buttons only when clicking a new one 
     foreach (var ctrl in divAlphabets.Controls) { 
      if (ctrl is LinkButton) { 
       ((LinkButton) ctrl).CssClass = "firstCharacter"; 
      } 
     } 
     //Set the clicked button and save the Session state 
     var lbtn = (LinkButton)divAlphabets.FindControl("lbtnCharacter" + e.CommandArgument); 
     lbtn.CssClass = "firstCharacter highlighted"; 
     Session["CurrentLetter"] = lbtn.Text; 
    } 
+0

Daniel Извините, но я сталкиваюсь с новой проблемой, так как этот фильтр фильтрует имя пользователей и отображение его в виде списка Предположу, я нажать «S» и есть много пользователей с этим именем при переходе на следующую страницу, щелкнув по номеру страницы datapager, выделенный цвет потерян, вы можете помочь мне – Mac

+0

В этом случае вам может потребоваться сохранить выбранную в настоящее время букву в сеансе –

+0

См. мой обновленный ответ. Поместите его на новую тестовую страницу и посмотрите, как она работает. –

 Смежные вопросы

  • Нет связанных вопросов^_^