2011-01-05 3 views
0

Привет, у меня есть элемент управления сеткой, где я являюсь обязательным списком наклеек. На вышеуказанной сетке, то есть вне боковой сетки, у меня есть две кнопки Create Sticker и Void Sticker. Наклейка в основном имеет три свойства Active, Void и Expired, отображаемые как текст в столбце. Существует условие добавления только одной наклейки за раз. Также, если есть активная стикер, пользователь не может добавить еще одну наклейку до тех пор, пока она не будет истекла или недействительна.Включить кнопку «Отключить» на основе строки сетки

Так что я хочу, чтобы всякий раз, когда моя сетка загружается, если есть столбец с активным текстом, стикер create/add будет отключен, а void будет включен. Я использую следующий код:

/// <summary> 
/// Handles the RowDataBound event of the gvSticker control. 
/// </summary> 
/// <param name="sender">The source of the event.</param> 
/// <param name="e">The <see cref="System.Web.UI.WebControls.GridViewRowEventArgs"/> instance containing the event data.</param> 
/// <remarks></remarks> 
protected void gvSticker_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) 
{ 
    if (Session["FisherId"] != null) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      Label lblStatus = (Label)e.Row.FindControl("lblStickerStatus"); 

      if (lblStatus.Text.Contains("Active")) 
     { 
      btnAddSticker.Enabled = false; 
      btnVoidSticker.Enabled = true; 

       HyperLink hlStickerNum = (HyperLink)e.Row.FindControl("hlStickerNumber"); 
       hlStickerNum.Attributes.Add("style", 
         "cursor:hand;text-decoration:underline;font-weight:bold;"); 
      if (!string.IsNullOrEmpty(hlStickerNum.Text.Trim())) 
      { 
      string urlWithParameters = "Stickers.aspx?StickerId=" 
            + hlStickerNum.Text; 
        hlStickerNum.Attributes.Add("OnClick", "popWinNote('" + 
            urlWithParameters + "')"); 
       } 

      } 
      else 
      { 
       btnAddSticker.Enabled = true; 
       btnVoidSticker.Enabled = false; 
      } 

     } 
    } 
    else 
    { 
     btnAddSticker.Enabled = true; 
     btnVoidSticker.Enabled = false; 
    } 
} 

Он хорошо работает при первой загрузке сетки. Но сбой происходит, когда я изменяю индекс страницы сетки.

Update

Здесь связывание и pageindexchanging события

/// <summary> 
    /// Handles the PageIndexChanging event of the gvSticker control. 
    /// </summary> 
    /// <param name="sender">The source of the event.</param> 
    /// <param name="e">The <see cref="System.Web.UI.WebControls.GridViewPageEventArgs"/> instance containing the event data.</param> 
    /// <remarks></remarks> 
    protected void gvSticker_PageIndexChanging(object sender, GridViewPageEventArgs e) 
    { 
     gvSticker.PageIndex = e.NewPageIndex; 
     BindStickerGrid(); 
    } 



/// <summary> 
     /// Binds the sticker grid. 
     /// </summary> 
     /// <param name="stickers">collection of stickers.</param> 
     /// <remarks></remarks> 
     protected void BindStickerGrid() 
     { 
      if (Session["FisherId"] != null) 
      { 
       Collection<Sticker> _stickerCollection = _manager.GetStickerDetailsForGrid(Session["FisherId"].ToString(), "fisher"); 

       if (_stickerCollection != null) 
       { 
        if (_stickerCollection.Count > 0) 
        { 
         gvSticker.DataSource = _stickerCollection; 
         gvSticker.DataBind(); 
        } 
       } 
      } 
     } 

ответ

1

Вы уверены, что RowDataBound события вызывается каждый раз, когда страница загружена? Я думаю, что управление GridView может принимать данные из ViewState, когда происходит обратная передача.

UPDATE

Может быть, есть ошибка в вашей логике. Вы постоянно включаете и выключаете кнопки для каждой строки, что означает, что они будут отключены, если последняя наклейка активна и противоположна, если последняя наклейка неактивна. Вот как я предлагаю вам сделать:

  1. В обработчике RowDataBound событий подсчитывает количество активных наклеек (или просто использовать флаг, указывающий, была ли найдена активная наклейка на текущей странице).
  2. Подпишитесь на PreRender кнопки событий и переключателей в соответствующее состояние в зависимости от того, сколько активных наклеек будет отображаться на текущей странице.

- Павел

+0

см мой вопрос, добавил обновления для изменения и методов связывания –

+0

Я отредактировал мой ответ pageindex. – volpav

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