Привет, у меня есть элемент управления сеткой, где я являюсь обязательным списком наклеек. На вышеуказанной сетке, то есть вне боковой сетки, у меня есть две кнопки 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();
}
}
}
}
см мой вопрос, добавил обновления для изменения и методов связывания –
Я отредактировал мой ответ pageindex. – volpav