Изменение цвета кнопки «Ссылка» при любом событии пейджера данных - PullRequest
0 голосов
/ 17 августа 2010

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

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

            // Setting the properties of dynamically created Linkbutton.
            lbtnCharacter.Text = Convert.ToString(asciiValue);
            lbtnCharacter.CssClass = "firstCharacter";
            lbtnCharacter.ToolTip = "Show Tags starting with '" + Convert.ToString(asciiValue) + "'";
            lbtnCharacter.CommandArgument = Convert.ToString(asciiValue);
            lbtnCharacter.Command += new CommandEventHandler(lbtnCharacter_Command);
        }
    }



// For assigning default color to linkbutton text in page load
        foreach (var ctrl in divAlphabets.Controls)
        {
            if (ctrl is LinkButton)
            ((LinkButton)ctrl).CssClass = "firstCharacter";
        }

void lbtnCharacter_Command(object sender, CommandEventArgs e)
        {
            // Storing the values of pressed alphabet in viewstate.
            ViewState["Selected_Character"] = e.CommandArgument;
            LinkButton lbtnSelected = (LinkButton)divAlphabets.FindControl("lbtnCharacter" + e.CommandArgument);
            lbtnSelected.CssClass = "firstCharacter highlighted";
            txtTagFilter.Text = string.Empty;

            BindTagList();
        }

1 Ответ

1 голос
/ 17 августа 2010

Надеюсь, я понял ваш вопрос.

Вы устанавливаете свой элемент Selected_Character в обработчике команд, а затем задаете класс кнопки, чтобы выделить его.Это срабатывает только при нажатии кнопки, а не при переходе на следующую страницу.Почему бы не разделить эти две операции.Установите класс кнопки ссылки на prerender, если Selected_Character совпадает.Таким образом, даже если вы перейдете на страницу, кнопка ссылки останется выделенной.

Я бы также установил ваш выбранный символ в качестве параметра строки запроса, если кто-то скопирует и вставит ссылку на вашу страницу, кнопка не будет выделена, и правильнаяданные не будут отображаться.

Надеюсь, что это поможет.

Редактировать: не проверял ниже, но, возможно, это поможет вам начать.

void lbtnCharacter_Command(object sender, CommandEventArgs e)
{
    // redirect to self with tag as qs parameter
    Response.Redirect(string.Format("{0}?tag={1}", Request.Url.GetLeftPart(UriPartial.Path), e.CommandArgument));
}

protected void Page_PreRender(object sender, EventArgs e) 
{
    if (Request.QueryString["tag"] != null) {
        LinkButton lbtnSelected = (LinkButton)divAlphabets.FindControl("lbtnCharacter" + Request.QueryString["tag"]);
        lbtnSelected.CssClass = "firstCharacter highlighted";
    }
}

NB Вы также будетенеобходимо изменить свой BindTagList, чтобы использовать строку запроса также.Я предполагаю, что вы вызываете это в событии загрузки страницы.

...